Leçon 5 / 9 — Chapitre 6: Combiner fenêtres, CASE et sous-requêtes
Combiner une fenêtre, un CASE et un GROUP BY classique
Une fonction de fenêtre calculée dans une CTE peut ensuite être réutilisée par un GROUP BY classique dans la requête englobante — combinant ainsi les deux mondes.
WITH comparaison AS (
SELECT boutique, mois, montant,
CASE
WHEN montant > AVG(montant) OVER (PARTITION BY boutique) THEN $q2$au-dessus$q2$
WHEN montant < AVG(montant) OVER (PARTITION BY boutique) THEN $q2$en dessous$q2$
ELSE $q2$dans la moyenne$q2$
END AS position_relative
FROM ventes_boutique
)
SELECT boutique, position_relative, COUNT(*) AS nb_mois
FROM comparaison
GROUP BY boutique, position_relative
ORDER BY boutique, position_relative;
La moyenne de Nord (100, 150, 200) est 150 : mois 1 (100) est en dessous, mois 2 (150) est dans la moyenne, mois 3 (200) est au-dessus — 3 groupes d'1 mois chacun. La moyenne de Sud (80, 80, 140) est 100 : les deux mois à 80 sont en dessous (groupe de 2), le mois à 140 est au-dessus (groupe d'1).
Résultat final : 5 lignes (3 pour Nord, 2 pour Sud).
À retenir :
- Une CTE peut calculer une colonne à base de fonctions de fenêtre, puis la requête englobante peut la traiter comme n'importe quelle colonne normale — y compris avec GROUP BY, qui ne comprend pourtant pas les fonctions de fenêtre par lui-même.
- Cette séparation (fenêtre dans la CTE, agrégation classique par-dessus) est la façon standard de combiner les deux mécanismes.
À vous de jouer : combien de mois la boutique Sud a-t-elle dans la catégorie 'en dessous' ?
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