Problème :
Vous souhaitez classer les enregistrements en sautant les positions de classement après les lignes qui ont le même classement.
Exemple :
Notre base de données contient une table nommée championship
avec des données dans les colonnes suivantes :id
(clé primaire), user_name
, et score
.
identifiant | nom_utilisateur | score |
111 | Jean | 12 |
112 | Marie | 23 |
115 | Lisa | 45 |
120 | Alan | 23 |
221 | Chris | 23 |
Affichons tous les noms d'utilisateurs et leurs scores triés par ordre décroissant et classés par score.
Solution 1 :
SELECT RANK() OVER(ORDER BY score DESC) AS rank_place, user_name, score FROM championship;
Cette requête renvoie le classement suivant :
rang_place | nom_utilisateur | score |
1 | Lisa | 45 |
2 | Marie | 23 |
2 | Alan | 23 |
2 | Chris | 23 |
5 | Jean | 12 |
Notez que le numéro de classement va de 1 à 5, trié par score dans l'ordre décroissant.
Discussion :
Utilisez RANK
si vous souhaitez ignorer les positions de classement après les lignes avec le même rang. Dans notre exemple, Mary, Alan et Chris avaient tous le même classement de 2. La prochaine position éligible est 5 (calculée à partir de 2 + 3 lignes avec le même classement).