Leçon 4 / 9 — Chapitre 8: Mise en pratique : ventes mensuelles
Classer les vendeurs sur un total agrégé : GROUP BY puis RANK
Une fonction de fenêtre peut aussi s'appliquer par-dessus un résultat déjà agrégé avec GROUP BY — une combinaison légèrement différente de celles vues au chapitre 6 (où le GROUP BY suivait la fenêtre, pas l'inverse).
WITH totaux AS (
SELECT vendeur_id, SUM(montant) AS total_trimestre
FROM ventes_mensuelles
GROUP BY vendeur_id
)
SELECT v.nom, t.total_trimestre,
RANK() OVER (ORDER BY t.total_trimestre DESC) AS rang_general
FROM totaux t
JOIN vendeurs v ON v.id = t.vendeur_id;
La CTE totaux agrège d'abord chaque vendeur en une seule ligne (GROUP BY classique) ; la requête englobante applique ensuite RANK() sur ce résultat déjà agrégé. Totaux : Fatou 500, Karim 600, Solene 1000, Tarek 1200. Classement : Tarek (1), Solene (2), Karim (3), Fatou (4).
À retenir :
- Une fonction de fenêtre peut s'appliquer sur le résultat d'un GROUP BY (dans une CTE), tout comme un GROUP BY peut s'appliquer sur le résultat d'une fonction de fenêtre (chapitre 6) — les deux ordres sont possibles, selon ce qu'on veut obtenir.
- Ici, GROUP BY réduit d'abord les données à une ligne par vendeur, puis RANK() les classe entre elles.
À vous de jouer : quel rang_general obtient Karim (total 600) ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 72 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès