Problem:
Du vill ranka poster genom att hoppa över rankningspositioner efter rader som har samma rankning.
Exempel:
Vår databas har en tabell som heter championship
med data i följande kolumner:id
(primärnyckel), user_name
och score
.
id | användarnamn | poäng |
111 | John | 12 |
112 | Maria | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Chris | 23 |
Låt oss visa alla användares namn och deras poäng sorterade i fallande ordning och rangordnade efter poäng.
Lösning 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Den här frågan returnerar följande rankning:
rank_place | användarnamn | poäng |
1 | Lisa | 45 |
2 | Maria | 23 |
2 | Alan | 23 |
2 | Chris | 23 |
5 | John | 12 |
Lägg märke till att rangnumret är från 1 till 5, sorterat efter poäng i fallande ordning.
Diskussion:
Använd RANK
om du vill hoppa över rankningspositioner efter rader med samma rankning. I vårt exempel hade Mary, Alan och Chris alla samma rankning på 2. Nästa kvalificerade position är 5 (beräknat från 2 + 3 rader med samma ranking).