Problema:
Vuoi aggiungere una posizione in classifica alle righe consecutivamente, anche se le righe hanno gli stessi valori.
Esempio:
Il nostro database ha una tabella denominata competition
con i dati nelle seguenti colonne:id
(chiave primaria), first_name
, last_name
e score
.
id | nome | cognome | punteggio |
11 | Giovanni | Tommaso | 345 |
14 | Maria | Johnson | 222 |
16 | Lisa | Marrone | 154 |
23 | Alan | Blake | 222 |
32 | Cris | Taylor | 154 |
Mostriamo tutti i dettagli sugli studenti:il loro cognome, nome e punteggi ordinati per score
in ordine decrescente. Non vogliamo saltare i numeri di posizione se alcuni punteggi sono gli stessi per più di uno studente.
Soluzione 1:
SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank, first_name, last_name, score FROM competition;
Nota che il rango varia da 1 a 3.
Discussione:
Usa DENSE_RANK
se non vuoi saltare le posizioni in classifica dopo le righe con la stessa classifica. Nel nostro esempio, anche se Mary e Alan hanno lo stesso grado 2, la posizione di Lisa è 3.