Problem:
Du vill lägga till en rankningsposition till rader i följd, även om raderna har samma värden.
Exempel:
Vår databas har en tabell som heter competition
med data i följande kolumner:id
(primär nyckel), first_name
, last_name
och score
.
id | förnamn | efternamn | poäng |
11 | John | Thomas | 345 |
14 | Maria | Johnson | 222 |
16 | Lisa | Brun | 154 |
23 | Alan | Blake | 222 |
32 | Chris | Taylor | 154 |
Låt oss visa all information om eleverna:deras efternamn, förnamn och poäng sorterade efter score
i fallande ordning. Vi vill inte hoppa över positionsnummer om vissa poäng är desamma för mer än en elev.
Lösning 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Lägg märke till att rangen varierar från 1 till 3.
Diskussion:
Använd DENSE_RANK
om du inte vill hoppa över rankningspositioner efter rader med samma rankning. I vårt exempel, även om Mary och Alan har samma rang 2, är positionen för Lisa 3.