1

私がdogs(dogid)テーブルとfleas(fleaid)テーブルを持っdogs_favorite_fleas(dogid,fleaid)ていて、犬がお気に入りのノミをリストに載せることができるとしましょうdog_favorite_fleas。クエリ/一時テーブルを作成して、すべての一意のノミのセットをリストし、それらをカウントするにはどうすればよいですか? たとえば、Rexlikesflea aflea b、and Spotlikes 'ノミ aandノミ c, andラッシーlikesノミ bandノミ a' としましょう。クエリの結果は次のようになります。

fleas          |count
-------------------------
flea a, flea b |2
flea a, flea c |1

: ~5000 の異なるノミと ~450 万の犬がいます。

このクエリを作成する最良の方法は何ですか?

4

1 に答える 1

2

GROUP_CONCATとともに使用GROUP BY:

SELECT GROUP_CONCAT(f.flea SEPARATOR ', ') AS 'fleas', COUNT(df.dogid) 'Count'
FROM dogs_favorite_fleas df 
INNER JOIN fleas f ON df.fleaid = f.id
INNER JOIN dogs d ON df.dogid = d.id
GROUP BY df.dogid

SQL フィドルのデモ

更新:グループ化されたノミのリストの数を数えたい場合は、前のクエリをサブクエリで囲み、次のように使用GROUP BYします。COUNT

SELECT fleas, COUNT(fleas) 'COUNT'
FROM
(
   SELECT GROUP_CONCAT(f.flea SEPARATOR ', ') AS 'fleas'
   FROM dogs_favorite_fleas df 
   INNER JOIN fleas f ON df.fleaid = f.id
   INNER JOIN dogs d ON df.dogid = d.id
   GROUP BY df.dogid
   ORDER BY f.flea
) t
GROUP BY fleas

更新された SQL Fiddle デモ

于 2012-10-10T13:56:37.163 に答える