2013-07-29 3 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 

Проблема заключается в том, что Oreo и Чарли, Тигр и Люси должны быть ранжированы то же самое, так как они равны 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

PLS предоставить некоторые данные образца –

ответ

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

Смежные вопросы