Problema:
Vuoi classificare i record saltando le posizioni in classifica dopo le righe che hanno lo stesso ranking.
Esempio:
Il nostro database ha una tabella chiamata championship
con i dati nelle seguenti colonne:id
(chiave primaria), user_name
e score
.
id | nome_utente | punteggio |
111 | Giovanni | 12 |
112 | Maria | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Cris | 23 |
Mostriamo tutti i nomi degli utenti e i loro punteggi ordinati in ordine decrescente e classificati per punteggio.
Soluzione 1:
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Questa query restituisce la seguente classifica:
rank_place | nome_utente | punteggio |
1 | Lisa | 45 |
2 | Maria | 23 |
2 | Alan | 23 |
2 | Cris | 23 |
5 | Giovanni | 12 |
Si noti che il numero della classifica va da 1 a 5, ordinato per punteggio in ordine decrescente.
Discussione:
Usa RANK
se vuoi saltare le posizioni in classifica dopo le righe con la stessa classifica. Nel nostro esempio, Mary, Alan e Chris avevano tutti la stessa classifica di 2. La successiva posizione idonea è 5 (calcolata da 2 + 3 righe con la stessa classifica).