我已经在MySQL order by duplicates top first
问了类似的问题如何限制重复,例如不超过2个不同
我有像
这样的字段 id color
1 red
2 green
3 yellow
4 green
5 green
6 red
7 red
我想按重复进行分组,并且最常重复 所以它应该这样选择:
id color
2 green
4 green
1 red
6 red
3 yellow
谢谢你们
答案 0 :(得分:1)
存在逻辑问题。 “Distinct”不起作用,因为查询结果行在“id”和“color”值的组合中是唯一的。只有从select列中的列列表中删除id列时,它才有效。否则使用可以使用像“max / min / avg / count”这样的聚合函数 - 我更喜欢max / min函数 - 来获取至少一个id?
如果你想计算颜色,试试这个:
Select count(color) as number_of_colors, color FROM table GROUP BY color ORDER BY count(color) DESC
答案 1 :(得分:1)
此查询最多显示每种颜色的两个ID,按重复次数的降序排列:
SELECT
c1.id,
c1.color
FROM
colors c1 INNER JOIN (SELECT color, COUNT(*) c FROM colors GROUP BY color) dup
ON c1.color = dup.color
LEFT JOIN colors c2
ON c1.id > c2.id AND c1.color=c2.color
GROUP BY
c1.color, c1.id
HAVING
COUNT(c2.id) < 2
ORDER BY
MAX(dup.c) DESC, c1.color, c1.id
请参阅小提琴here。