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.