Leçon 8 / 9 — Chapitre 4: CASE WHEN et agrégation conditionnelle
Combiner CASE et sous-requête
La condition d'un CASE peut elle-même contenir une sous-requête — par exemple pour comparer chaque ligne à une moyenne générale.
SELECT nom,
CASE
WHEN montant > (SELECT AVG(montant) FROM clients) THEN 'au-dessus de la moyenne'
ELSE 'en dessous ou égal'
END AS position_relative
FROM clients WHERE id IN (1, 6);
La sous-requête (SELECT AVG(montant) FROM clients) calcule la moyenne générale sur les 6 clients (environ 72.81). Pour le client d'id 1 (montant = 120.456, nettement au-dessus) : 'au-dessus de la moyenne'. Pour le client d'id 6 (montant = -150, nettement en dessous) : 'en dessous ou égal'.
À retenir :
- Une condition de
CASEpeut comparer une colonne au résultat d'une sous-requête scalaire, exactement comme dans unWHERE. - La sous-requête n'est pas corrélée ici : elle calcule une seule fois la moyenne générale, réutilisée pour chaque ligne évaluée.
- Cette technique évite de calculer la moyenne séparément puis de la recopier manuellement dans la condition.
À vous de jouer : sur ces mêmes données, le client d'id 4 (montant = 60.75) serait-il classé « au-dessus » ou « en dessous » de la moyenne générale (environ 72.81) ?
Continuez ce module
Débloquez les leçons restantes ainsi que la certification finale.
2 500 XOF / 3,81 € / 4,15 $
Débloquez les 80 leçons restantes de ce module
Votre paiement est vérifié avant l'activation de l'accès