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 l'attestation finale.

8 500 XOF / 12,96 € / 14,12 $

Débloquez les 87 leçons restantes de ce module

Pour vous communiquer où envoyer le paiement.

Moyen de paiement souhaité

Nous vous contactons pour le paiement — activé dès réception.