La fonction DENSE_RANK() nous permet d'attribuer un classement unique à chaque ligne d'un ensemble de résultats en fonction des valeurs d'une colonne spécifiée supplémentaire. Elle est très similaire à la fonction Rank() mais avec de légères différences dans la façon dont la fonction gère les enregistrements en double.
Dans ce didacticiel, nous explorerons le fonctionnement de cette fonction, la syntaxe fournie et comment nous pouvons l'utiliser dans une base de données.
Comment ça fonctionne
Commençons par expliquer le fonctionnement de cette fonction. Il est bon de garder à l’esprit que la fonction est de haut niveau et que nous ne pouvons pas expliquer l’implémentation sous-jacente.
La fonction fonctionne en attribuant un rang à chaque ligne du jeu de résultats en commençant par le rang 1 et en augmentant de 1 pour chaque valeur unique dans les colonnes.
Les lignes avec des valeurs similaires (doublons) dans les colonnes spécifiées se voient attribuer le même rang et la ligne suivante avec une valeur différente se voit attribuer le prochain rang disponible, sans aucun espace.
Comme nous l'avons mentionné, la fonction ne laisse aucun espace là où il y a des valeurs en double, ce qui la rend différente de la fonction Rank().
Une utilisation courante de la fonction dense_rank() consiste à effectuer les opérations de classement. Par exemple, nous pouvons l'utiliser pour trouver les N premiers enregistrements, etc.
Syntaxe de la fonction :
Ce qui suit décrit la syntaxe de la fonction dense_rank() :
DENSE_RANK() SUR ([PARTITION PAR expression_partition, ... ]
COMMANDE PAR expression_tri [ASC | DESC], ...
)
Dans la syntaxe donnée :
- Nous commençons par la fonction dense_rank() elle-même.
- La clause OVER signale le début des spécifications de la fonction window. Ceci définit la manière dont le classement est appliqué dans l'ensemble de résultats.
- La PARTITION BY partition_expression est une clause facultative qui nous permet de partitionner l'ensemble résultant en groupes ou partitions basés sur une ou plusieurs colonnes. Le classement est appliqué séparément sur chaque partition, le classement étant réinitialisé sur une nouvelle partition.
- L'expression_tri ORDER BY spécifie l'ordre dans lequel nous souhaitons utiliser pour trier les données dans les partitions résultantes.
Exemples de données
Pour montrer comment utiliser la fonction dense_rank(), commençons par un tableau avec un exemple de données. Dans notre cas, nous utilisons un exemple de tableau « commandes » comme suit :
Exemple 1 : utilisation de la fonction Dense_Rank()
Nous pouvons utiliser la fonction dense_rank() pour classer les commandes résultantes en fonction du prix. Prenons l'exemple de requête suivant :
SÉLECTIONNERnuméro de commande,
nom_utilisateur_client,
produit_acheté,
DENSE_RANK() SUR (
COMMANDE PAR
prix DISQUE
) prix_rang
DEPUIS
commandes o;
Dans l'exemple donné, nous utilisons la fonction dense_rank() pour classer les données en fonction du prix des commandes. Nous omettons la clause PARTITION BY car nous ne regroupons pas les données.
Le résultat résultant est le suivant :
Exemple 2 : PARTITION PAR
Nous pouvons également ajouter la clause PARTITION BY pour regrouper les données en différents segments, par exemple en fonction du produit acheté.
Un exemple de requête est le suivant :
SÉLECTIONNERnuméro de commande,
nom_utilisateur_client,
produit_acheté,
DENSE_RANK() SUR (
partition par product_purchased
COMMANDE PAR
prix DISQUE
) prix_classement
DEPUIS
commandes o;
Cela devrait regrouper les données en différents groupes en fonction des groupes résultants et appliquer le classement des éléments de chaque groupe.
Conclusion
Dans cet article, nous avons appris les bases de l'utilisation et de l'utilisation de la fonction de fenêtre dense_rank() en SQL pour attribuer un rang aux valeurs en fonction de colonnes spécifiques.