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

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

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).