3

私はすでに同様の質問をここで行っています MySQL order by duplicates top first

重複を制限するのはどうですか?

私は次のようなフィールドを持っています

   id    color
   1     red
   2     green
   3     yellow
   4     green
   5     green
   6     red
   7     red

duplicates でグループ化し、最も頻繁な重複を最初にグループ化したいので、次のように選択する必要があります。

   id    color
   2     green
   4     green
   1     red
   6     red
   3     yellow

君たちありがとう

4

2 に答える 2

1

論理的な問題があります。クエリ結果行は「id」と「color」値の組み合わせで一意であるため、「Distinct」は機能しません。選択の列リストから id 列を削除した場合にのみ機能します。それ以外の場合は、「max/min/avg/count」のような集約関数を使用できます-私は最大/最小関数を好みます-少なくとも1つの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 に答える
1

このクエリは、色ごとに最大 2 つの 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 に答える