Проблем:
Искате да добавите позиция за класиране към редовете последователно, дори ако редовете имат еднакви стойности.
Пример:
Нашата база данни има таблица с име competition
с данни в следните колони:id
(първичен ключ), first_name
, last_name
и score
.
id | първо_име | фамилно_име | резултат |
11 | Джон | Томас | 345 |
14 | Мери | Джонсън | 222 |
16 | Лиза | Кафяв | 154 |
23 | Алан | Блейк | 222 |
32 | Крис | Тейлър | 154 |
Нека покажем всички подробности за учениците:тяхното фамилно име, собствено име и резултати, сортирани по score
в низходящ ред. Не искаме да пропускаме номерата на позициите, ако някои резултати са еднакви за повече от един ученик.
Решение 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Обърнете внимание, че рангът варира от 1 до 3.
Дискусия:
Използвайте DENSE_RANK
ако не искате да пропускате позиции в класирането след редове със същия ранг. В нашия пример, въпреки че Мери и Алън имат еднакъв ранг 2, позицията за Лиза е 3.