PaliSkill
SQL avancé

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

La clause FILTER : une alternative à CASE dans un agrégat

FILTER (WHERE condition), ajoutée après une fonction d'agrégation, ne fait agréger que les lignes qui remplissent cette condition — une alternative plus lisible à SUM(CASE WHEN ...) pour ce cas d'usage précis.

SELECT
  COUNT(*) FILTER (WHERE statut = 'actif') AS nb_actifs,
  SUM(montant) FILTER (WHERE statut = 'inactif') AS total_inactif
FROM clients;

COUNT(*) FILTER (WHERE statut = 'actif') ne compte que les lignes actives : 4, exactement comme SUM(CASE WHEN statut = 'actif' THEN 1 ELSE 0 END) à la leçon précédente. SUM(montant) FILTER (WHERE statut = 'inactif') ne somme que montant pour les lignes inactives : 50.

À retenir :

  • fonction_agregation(...) FILTER (WHERE condition) restreint l'agrégation aux lignes qui remplissent la condition, sans toucher aux autres lignes du résultat.
  • FILTER produit le même résultat qu'un CASE WHEN équivalent dans la plupart des cas, mais se lit souvent plus directement.
  • FILTER reste une extension moins universelle que CASE (norme SQL récente, PostgreSQL notamment) : CASE fonctionne partout, FILTER pas nécessairement sur tous les moteurs.

À vous de jouer : réécrivez SUM(montant) FILTER (WHERE statut = 'inactif') sous la forme équivalente avec SUM(CASE WHEN ...).

🔒

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