Problem:
Du vil rangere poster ved at springe rangeringspositioner over efter rækker, der har samme rangering.
Eksempel:
Vores database har en tabel ved navn championship
med data i følgende kolonner:id
(primær nøgle), user_name
, og score
.
id | brugernavn | score |
111 | John | 12 |
112 | Mary | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Chris | 23 |
Lad os vise alle brugeres navne og deres score sorteret i faldende rækkefølge og rangeret efter score.
Løsning 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Denne forespørgsel returnerer følgende rangering:
rank_place | brugernavn | score |
1 | Lisa | 45 |
2 | Mary | 23 |
2 | Alan | 23 |
2 | Chris | 23 |
5 | John | 12 |
Bemærk, at rangnummeret er fra 1 til 5, sorteret efter score i faldende rækkefølge.
Diskussion:
Brug RANK
hvis du vil springe rangeringspositioner over efter rækker med samme rang. I vores eksempel havde Mary, Alan og Chris alle den samme placering på 2. Den næste kvalificerede placering er 5 (beregnet ud fra 2 + 3 rækker med samme rang).