Problem:
Du vil tilføje en rangeringsposition til rækker fortløbende, selvom rækkerne har de samme værdier.
Eksempel:
Vores database har en tabel ved navn competition
med data i følgende kolonner:id
(primær nøgle), first_name
, last_name
, og score
.
id | fornavn | efternavn | score |
11 | John | Thomas | 345 |
14 | Mary | Johnson | 222 |
16 | Lisa | Brun | 154 |
23 | Alan | Blake | 222 |
32 | Chris | Taylor | 154 |
Lad os vise alle detaljer om elever:deres efternavn, fornavn og score sorteret efter score
i faldende rækkefølge. Vi ønsker ikke at springe positionsnumre over, hvis nogle resultater er ens for mere end én elev.
Løsning 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Bemærk, at rangen varierer fra 1 til 3.
Diskussion:
Brug DENSE_RANK
hvis du ikke vil springe rangeringspositioner over efter rækker med samme rang. I vores eksempel er positionen for Lisa 3, selvom Mary og Alan har samme rang 2.