Rang postgres

Rang Postgres



Dans PostgreSQL, la fonction rank() est une fonction Window qui nous permet d'attribuer un rang à chaque ligne d'un ensemble de résultats en fonction d'un critère de tri donné. Comme la plupart des fonctions de fenêtre, la fonction de classement est utile dans les requêtes analytiques telles que la détermination du rang d'une ligne par rapport aux autres dans un ensemble de résultats donné.

Ce didacticiel explique comment utiliser les fonctions PostgreSQL. Nous explorons également la syntaxe et les paramètres de la fonction et examinons quelques exemples pratiques.

Fonction PostgreSQL Rank()

Ce qui suit montre la syntaxe de la fonction rank() dans PostgreSQL :







RANK() SUR (PARTITION BY expression_partition ORDER BY expression_tri [ASC|DESC])

Nous commençons par appeler la fonction rank(). Nous utilisons ensuite le mot-clé OVER pour indiquer que nous souhaitons effectuer une opération de fonction de fenêtre.



Vient ensuite la PARTITION BY partition_expression. Cette clause divise les lignes en différentes partitions en fonction d'une expression donnée. Le classement est effectué indépendamment dans chaque partition où la valeur entière du rang commence à 1 pour chaque nouvelle partition.



Enfin, nous avons la clause ORDER BY qui spécifie la colonne ou l'expression qui détermine l'ordre des lignes.





Exemple de fonction PostgreSQL Rank()

La requête suivante montre un exemple basique d'utilisation de la fonction rank() de PostgreSQL :

SELECT valeur, RANK() OVER (ORDER BY valeur) AS rang
DEPUIS (
VALEURS (10), (20), (5), (15), (10)
) AS données(valeur);

Dans cet exemple, nous classons les valeurs en fonction de leur ordre croissant. Les deux occurrences de la valeur sont affectées du même rang car elles sont similaires et apparaissent à la même position au sein de la commande.



Le tableau obtenu est le suivant :

SELECT valeur, RANK() OVER (PARTITION BY valeur % 2 ORDER BY valeur) AS rang
DEPUIS (
VALEURS (10), (20), (5), (15), (10)
) AS données(valeur);

Exemple de fonction PostgreSQL Rank() avec la clause Partition By

Considérez l'exemple suivant :

SELECT valeur, RANK() OVER (PARTITION BY valeur % 2 ORDER BY valeur) AS rang
DEPUIS (
VALEURS (10), (20), (5), (15), (10)
) AS données(valeur);

Dans cet exemple, nous avons ajouté la clause PARTITION BY avec une expression qui vérifie si la valeur est un nombre pair ou impair. Cela devrait effectivement regrouper les valeurs en deux partitions : une pour les nombres pairs (où le reste est 0) et l'autre pour les nombres impairs (où le reste est 1).

L'ensemble obtenu est le suivant :

Exemple de fonction PostgreSQL Rank() en combinant plusieurs fonctionnalités SQL

Vous pouvez également créer des requêtes plus complexes à l'aide de la fonction rank(). Prenons par exemple la base de données Pagila. Supposons que nous souhaitions récupérer les cinq premiers clients en fonction de leurs paiements de location totaux et leur attribuer des classements.

Nous pouvons utiliser la fonction rank() comme indiqué dans la requête suivante :

SELECT customer_id, first_name, last_name, total_payments,
RANK() OVER (ORDER BY total_payments DESC) AS rang
DEPUIS (
SELECT c.customer_id, c.first_name, c.last_name, SUM(p.amount) AS total_payments
DU client c
JOIN paiement p ON c.customer_id = p.customer_id
GROUP BY c.customer_id, c.first_name, c.last_name
) AS paiement_client
Classement ORDRE PAR
LIMITE 10 ;

Dans cet exemple, nous sélectionnons le customer_id, first_name, last_name, total_payment et le rank() attribué. Ensuite, nous utilisons la fonction rank() pour attribuer un rang à chaque client en fonction du total_payment trié par ordre décroissant.

La sous-requête interne nous permet de calculer le total des paiements pour chaque client en joignant les tables client et paiement. Nous regroupons ensuite le résultat en fonction des colonnes customer_id, first_name et last_name pour récupérer la somme des paiements pour chaque client.

Enfin, dans la requête externe, nous appliquons la fonction rank() sur le jeu de résultats et le classons par total_payments dans l'ordre croissant. Nous incluons également la clause limit pour récupérer uniquement les 10 premières lignes.

Comme vous pouvez le constater, vous pouvez générer des données plus pertinentes en combinant plusieurs fonctionnalités SQL telles que le tri, le filtrage, les agrégats, les jointures, etc.

Conclusion

Nous avons exploré comment nous pouvons travailler avec la fonction rank() dans PostgreSQL pour récupérer le rang d'une ligne donnée à partir d'un ensemble de résultats en fonction des conditions définies. Nous avons également expliqué comment combiner la fonction rank() avec d'autres outils SQL pour créer des requêtes plus complexes.