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

Comment classer les lignes dans une partition en SQL

Problème :

Dans le jeu de résultats, vous souhaitez partitionner les enregistrements et classer les lignes dans chaque partition, en ajoutant une autre colonne pour afficher les rangs des lignes dans la partition.

Exemple :

Notre base de données a une table nommée magazine avec des données dans les colonnes suivantes :id (clé primaire), name , category , et price .

identifiant nom catégorie prix
105 Vivre à la campagne style de vie 1.70
108 Magazine d'actualités actualités 3.35
115 Décibel musique 6,50
123 Magasin de batterie musique 6,50
145 Coucher de soleil style de vie 12.00
155 Monde style de vie 9.50
158 Clavier musique 8.45

Regroupons les magazines par catégorie et classez chaque groupe par ordre décroissant de prix . Affichez la position de classement, le nom, la catégorie et le prix de chaque magazine.

Solution :

SELECT  
  category,
  name,
  price,
  RANK() OVER (PARTITION BY category
                    ORDER BY price DESC
                    ) AS price_rank
FROM magazine;

Voici le résultat :

catégorie nom prix classement_prix
style de vie Coucher de soleil 12.00 1
style de vie Monde 9.50 2
style de vie Vivre à la campagne 1.70 3
musique Clavier 8.45 1
musique Décibel 6,50 2
musique Magasin de batterie 6,50 2
actualités Magazine d'actualités 3.35 1

Discussion :

Pour partitionner les lignes et les classer selon leur position dans la partition, utilisez la fonction RANK() avec la clause PARTITION BY.

La fonction RANK() de SQL nous permet d'ajouter la position d'un enregistrement dans le jeu de résultats ou dans chaque partition. Dans notre exemple, nous classons les lignes dans une partition.

La clause OVER() vient toujours après RANK(). OVER() doit contenir une clause ORDER BY. Si vous renvoyez des rangs dans une partition, placez une clause PARTITION BY dans la clause OVER(). PARTITION BY est suivi d'une expression ou d'un nom de colonne; dans notre exemple, nous utilisons la colonne category (PARTITION BY category ).

Remarque : Si vous n'utilisez pas de partitions, vous pouvez omettre PARTITION BY et simplement mettre la clause ORDER BY dans OVER().

Après PARTITION BY, placez ORDER BY suivi des noms des colonnes ou expressions de tri. Dans notre exemple, nous trions par ordre décroissant selon la colonne price (ORDER BY price DESC ). Le mot clé DESC indique un ordre de tri décroissant.

Dans l'exemple ci-dessus, l'utilisation de RANK() avec PARTITION BY a divisé l'ensemble de résultats en groupes distincts de magazines par leur catégorie . Avec chaque groupe, les lignes ont été triées par prix puis classé au sein de ce groupe.