0

内部結合から一致する各プロパティのユニット数のカウントの疑似(?)列を返したいことを除いて、私はそれが望むように機能する次のクエリを持っています。ここで、p.team=u.teamおよびu.deleted='0000-00-00 00:00:00'およびu.rates!='0'です。同じクエリでこれを行うことはできますか?

プロパティにはいくつかのユニットがあります。それらはすべて「チーム」に接続されています(ユーザー名を考えてください)。

SELECT DISTINCT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, p.url_title 
        FROM Properties AS p
        INNER JOIN Units AS u ON p.team = u.team
        INNER JOIN Rates AS r ON p.team = r.team
        INNER JOIN Photos AS ph ON p.team = ph.team
        AND p.public   = '1'
        AND u.rates   != '0'
        AND p.deleted  =  '0000-00-00 00:00:00'
        AND u.deleted  =  '000-00-00 00:00:00'
        AND r.deleted  =  '000-00-00 00:00:00'
        AND ph.deleted =  '000-00-00 00:00:00'
        GROUP BY p.id
        ORDER BY p.created ASC
4

1 に答える 1

0

アグリゲートは1つしかなく、Properties行ごとにグループ化されているように見えるため、これは比較的簡単です。あなたはこのようなものを意味しますか(テストされていません)?

SELECT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, 
       p.url_title , COUNT(u.*) AS number_of_units
FROM Properties AS p
INNER JOIN Units AS u ON p.team = u.team
INNER JOIN Rates AS r ON p.team = r.team
INNER JOIN Photos AS ph ON p.team = ph.team
AND p.public   = '1'
AND u.rates   != '0'
AND p.deleted  =  '0000-00-00 00:00:00'
AND u.deleted  =  '000-00-00 00:00:00'
AND r.deleted  =  '000-00-00 00:00:00'
AND ph.deleted =  '000-00-00 00:00:00'
GROUP BY p.id, p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng, p.url_title
ORDER BY p.created ASC

意味によっては、代わりにやらなければならない場合がありますCOUNT(DISTINCT(u.id))。あなたの質問から見分けるのは難しいです。


参考までに、「難しい方法」は、カウントを行うために結合するサブクエリを作成することです。複数の無関係なアイテムをカウントするため、または1つのものでグループ化して別のアイテムでカウントするために、これを行う必要がある場合があります。

SELECT DISTINCT p.title, p.state, p.city, p.regionID, p.team, p.type, p.lat, p.lng,
                p.url_title, uuCount.number_of_units
FROM Properties AS p
INNER JOIN Units AS u ON p.team = u.team
INNER JOIN Rates AS r ON p.team = r.team
INNER JOIN Photos AS ph ON p.team = ph.team
AND p.public   = '1'
AND u.rates   != '0'
AND p.deleted  =  '0000-00-00 00:00:00'
AND u.deleted  =  '000-00-00 00:00:00'
AND r.deleted  =  '000-00-00 00:00:00'
AND ph.deleted =  '000-00-00 00:00:00'
INNER JOIN 
(
    SELECT uu.team, COUNT(*) AS number_of_units
    FROM Units uu
    WHERE uu.deleted = '0000-00-00 00:00:00'
    AND u.rates != '0'
    GROUP BY uu.team
) AS uuCount ON p.team = uuCount.team
GROUP BY p.id
ORDER BY p.created ASC
于 2012-07-19T18:18:33.750 に答える