2013-07-29 74 views
1

我有以下查詢:MySQL的分組排名

SELECT @rn:[email protected]+1 AS rank, pet_name, pet_count 
FROM (
    SELECT pet_name, COUNT(*) AS pet_count 
    FROM pets 
    WHERE pet_breed="cat" 
    GROUP BY pet_name 
    ORDER BY pet_count DESC 
) t1, (SELECT @rn:=0) t2 

產生的輸出是這樣的:

1 Kitty 87 
2 Smokey 81 
3 Bella 80 
4 Oreo 63 
5 Charlie 63 
6 Tiger 62 
7 Lucy 62 
8 Jack 61 
9 Tigger 60 

的問題是,奧利奧和查理,老虎和露西應該因爲他們的排名相同都是63所以結果看起來像

1 Kitty 87 
2 Smokey 81 
3 Bella 80 
4 Oreo 63 
4 Charlie 63 
5 Tiger 62 
5 Lucy 62 
6 Jack 61 
7 Tigger 60 

我只是不能弄清楚得到它的調整我想要的方式。

對此提出建議?

+0

請提供一些示例數據 –

回答

1
SELECT IF((@previous = pet_count, @rn, @rn:[email protected]+1) AS rank, pet_name, pet_count, @previous := pet_count 
FROM (
    SELECT pet_name, COUNT(*) AS pet_count 
    FROM pets 
    WHERE pet_breed="cat" 
    GROUP BY pet_name 
    ORDER BY pet_count DESC 
) t1, (SELECT @rn:=0) t2 

我沒有在實際中嘗試過。但概念將起作用

+0

這可以解決問題。 –

+0

太棒了!這解決了我稍微不同的問題,以及如果新組開始時,再次開始排名1。 – physicalattraction