Problem:
Chcesz dodać pozycję rankingową do wierszy kolejno, nawet jeśli wiersze mają te same wartości.
Przykład:
Nasza baza danych zawiera tabelę o nazwie competition
z danymi w następujących kolumnach:id
(klucz podstawowy), first_name
, last_name
i score
.
id | imię | nazwisko | wynik |
11 | Jan | Thomas | 345 |
14 | Maryi | Johnson | 222 |
16 | Lisa | Brązowy | 154 |
23 | Alan | Blake | 222 |
32 | Chrystusa | Taylor | 154 |
Wyświetlmy wszystkie szczegóły dotyczące uczniów:ich nazwisko, imię i wyniki posortowane według score
w kolejności malejącej. Nie chcemy pomijać numerów pozycji, jeśli niektóre wyniki są takie same dla więcej niż jednego ucznia.
Rozwiązanie 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Zauważ, że ranga wynosi od 1 do 3.
Dyskusja:
Użyj DENSE_RANK
jeśli nie chcesz pomijać pozycji rankingowych po wierszach o tej samej pozycji. W naszym przykładzie, mimo że Mary i Alan mają tę samą rangę 2, pozycja Lisy to 3.