3

我已经在这里问过类似的问题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

感谢你们

4

2 回答 2

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

在此处查看小提琴。

于 2013-04-06T10:28:36.097 回答
1

有一个逻辑问题。“Distinct”不起作用,因为查询结果行在“id”和“color”值的组合中是唯一的。仅当您从选择中的列列表中删除 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
于 2013-04-06T10:05:38.173 回答