Problem:
Chcesz uszeregować rekordy, pomijając pozycje rankingowe po wierszach o tej samej pozycji.
Przykład:
Nasza baza danych zawiera tabelę o nazwie championship
z danymi w następujących kolumnach:id
(klucz podstawowy), user_name
i score
.
id | nazwa_użytkownika | wynik |
111 | Jan | 12 |
112 | Maryi | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Chrystusa | 23 |
Wyświetlmy wszystkie nazwy użytkowników i ich wyniki posortowane w porządku malejącym i uszeregowane według wyniku.
Rozwiązanie 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
To zapytanie zwraca następujący ranking:
rank_place | nazwa_użytkownika | wynik |
1 | Lisa | 45 |
2 | Maryi | 23 |
2 | Alan | 23 |
2 | Chrystusa | 23 |
5 | Jan | 12 |
Zauważ, że numer rangi wynosi od 1 do 5, posortowany według wyniku w kolejności malejącej.
Dyskusja:
Użyj RANK
jeśli chcesz pominąć pozycje w rankingu po wierszach o tej samej pozycji. W naszym przykładzie Mary, Alan i Chris mieli ten sam ranking 2. Następna kwalifikująca się pozycja to 5 (obliczona z 2 + 3 wierszy o tej samej pozycji).