Probleem:
U wilt een rangschikkingspositie toevoegen aan rijen opeenvolgend, zelfs als de rijen dezelfde waarden hebben.
Voorbeeld:
Onze database heeft een tabel met de naam competition
met gegevens in de volgende kolommen:id
(primaire sleutel), first_name
, last_name
, en score
.
id | voornaam | achternaam | score |
11 | Jan | Thomas | 345 |
14 | Maria | Johnson | 222 |
16 | Lisa | Bruin | 154 |
23 | Alan | Blake | 222 |
32 | Chris | Taylor | 154 |
Laten we alle details over studenten weergeven:hun achternaam, voornaam en scores gesorteerd op score
in aflopende volgorde. We willen positienummers niet overslaan als sommige scores voor meer dan één leerling hetzelfde zijn.
Oplossing 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Merk op dat de rangorde varieert van 1 tot 3.
Discussie:
Gebruik DENSE_RANK
als u geen rangordeposities wilt overslaan na rijen met dezelfde rangorde. In ons voorbeeld, hoewel Mary en Alan dezelfde rang 2 hebben, is de positie voor Lisa 3.