PaliSkill
SQL avancé

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 CASE peut comparer une colonne au résultat d'une sous-requête scalaire, exactement comme dans un WHERE.
  • 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