2013-04-06 54 views
2

我已經問類似的問題在這裏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

所以,你想要最新的兩次與最小號的爲那些有兩個以上的條目爲每個'color'?但這不僅僅是排序,你想限制每種顏色的選擇。 – 2013-04-06 10:09:19

回答

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 
+0

這不是一個答案哥們。 – MuhammadHani 2013-04-06 10:06:26

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