Mysql 如何在SQL中实现类似集合的行为?

Mysql 如何在SQL中实现类似集合的行为?,mysql,sql,group-concat,Mysql,Sql,Group Concat,假设我有狗(dogid)表和跳蚤(fleaid)表和另一个狗最喜欢的跳蚤(dogid,fleaid)狗可以在狗最喜欢的跳蚤中列出他最喜欢的跳蚤。如何创建一个查询/临时表,列出所有唯一的跳蚤集合并对它们进行计数?例如,让我们说,Rex喜欢跳蚤a和跳蚤b,Spot喜欢“跳蚤a和跳蚤c,Lassie喜欢跳蚤b和跳蚤a”。查询结果应为: fleas |count ------------------------- flea a, flea b |2 flea a, flea c |1

假设我有
狗(dogid)
表和
跳蚤(fleaid)
表和另一个
狗最喜欢的跳蚤(dogid,fleaid)
狗可以在
狗最喜欢的跳蚤
中列出他最喜欢的跳蚤。如何创建一个查询/临时表,列出所有唯一的跳蚤集合并对它们进行计数?例如,让我们说,
Rex
喜欢
跳蚤a
跳蚤b
Spot
喜欢“跳蚤a
跳蚤c
Lassie
喜欢
跳蚤b
跳蚤a”。查询结果应为:

fleas          |count
-------------------------
flea a, flea b |2
flea a, flea c |1
注意:大约有5000只不同的跳蚤和450万只狗

进行此查询的最佳方式是什么?

分组方式一起使用:

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
更新:如果要计算分组跳蚤列表的数量,请将上一个查询包含在子查询中,并使用
groupby
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

您正在计算每个列表中有多少跳蚤,我想知道有多少这样的列表。在这个例子中,正确的答案应该是
跳蚤a、跳蚤b、跳蚤c | 2
跳蚤h、跳蚤g | 1
你搞定了更改答案,我会接受的,谢谢