Database
 sql >> Database >  >> RDS >> Database

Come aggiungere posizioni di classifica alle righe con DENSE_RANK() in SQL

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.