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
你搞定了更改答案,我会接受的,谢谢