Проблем:
Искате да класирате записи, като пропуснете позициите в класирането след редове, които имат същия ранг.
Пример:
Нашата база данни има таблица с име championship
с данни в следните колони:id
(първичен ключ), user_name
и score
.
id | потребителско_име | резултат |
111 | Джон | 12 |
112 | Мери | 23 |
115 | Лиза | 45 |
120 | Алан | 23 |
221 | Крис | 23 |
Нека покажем имената на всички потребители и техните резултати, сортирани в низходящ ред и класирани по резултат.
Решение 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Тази заявка връща следното класиране:
rank_place | потребителско_име | резултат |
1 | Лиза | 45 |
2 | Мери | 23 |
2 | Алан | 23 |
2 | Крис | 23 |
5 | Джон | 12 |
Обърнете внимание, че номерът на ранга е от 1 до 5, сортиран по резултат в низходящ ред.
Дискусия:
Използвайте RANK
ако искате да пропуснете позиции в класирането след редове със същия ранг. В нашия пример Мери, Алън и Крис имат еднакво класиране от 2. Следващата отговаряща на условията позиция е 5 (изчислена от 2 + 3 реда със същия ранг).