按重复排序首先是限制

时间:2013-04-06 10:03:55

标签: mysql sql

我已经在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
谢谢你们

2 个答案:

答案 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