PaliSkill
SQL avancé

Leçon 4 / 9 — Chapitre 4: CASE WHEN et agrégation conditionnelle

Agrégation conditionnelle : SUM(CASE WHEN…)

Placer un CASE à l'intérieur d'une fonction d'agrégation permet de compter ou de sommer sélectivement, selon une condition — une technique très utilisée pour construire des rapports avec plusieurs colonnes de résultat à partir d'une seule table.

SELECT
  SUM(CASE WHEN statut = 'actif' THEN 1 ELSE 0 END) AS nb_actifs,
  SUM(CASE WHEN statut = 'inactif' THEN 1 ELSE 0 END) AS nb_inactifs
FROM clients;

Pour chaque ligne, le premier CASE vaut 1 si statut = 'actif', sinon 0 ; SUM additionne ensuite ces 1 et 0 sur toute la table. Résultat : nb_actifs = 4 (clients 1, 2, 4, 5), nb_inactifs = 2 (clients 3, 6).

À retenir :

  • SUM(CASE WHEN condition THEN 1 ELSE 0 END) compte les lignes qui remplient une condition — équivalent à COUNT(*) FILTER (WHERE condition), vu plus loin dans ce chapitre.
  • Plusieurs SUM(CASE WHEN ...) dans un même SELECT produisent plusieurs colonnes de comptage conditionnel, chacune sur sa propre condition, sans GROUP BY ni jointure supplémentaire.
  • Cette technique fonctionne aussi bien pour compter (THEN 1 ELSE 0) que pour sommer une autre colonne (THEN montant ELSE 0), vu à la leçon suivante.

À vous de jouer : ajoutez une troisième colonne SUM(CASE WHEN montant < 0 THEN 1 ELSE 0 END) AS nb_remboursements, et calculez sa valeur.

🔒

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