Database
 sql >> Base de données >  >> RDS >> Database

Comment ajouter des positions de classement aux lignes avec DENSE_RANK() dans SQL

Problème :

Vous souhaitez ajouter une position de classement aux lignes de manière consécutive, même si les lignes ont les mêmes valeurs.

Exemple :

Notre base de données a une table nommée competition avec des données dans les colonnes suivantes :id (clé primaire), first_name , last_name , et score .

identifiant prénom nom_de_famille score
11 Jean Thomas 345
14 Marie Johnson 222
16 Lisa Marron 154
23 Alan Blake 222
32 Chris Taylor 154

Affichez tous les détails sur les étudiants :leur nom, prénom et scores triés par score par ordre décroissant. Nous ne voulons pas ignorer les numéros de position si certaines notes sont identiques pour plusieurs étudiants.

Solution 1 :

SELECT DENSE_RANK() OVER(ORDER BY score DESC) AS d_rank,
  first_name,
  last_name,
  score
FROM competition;

Notez que le rang varie de 1 à 3.

Discussion :

Utilisez DENSE_RANK si vous ne voulez pas ignorer les positions de classement après les lignes avec le même rang. Dans notre exemple, même si Mary et Alan ont le même rang de 2, la position de Lisa est de 3.