count(*) filter (where condition) ne compte que les lignes remplissant la condition : un agrégat conditionnel. C'est idéal pour un « pivot » (transformer des categories en colonnes) en une seule requête.
Syntaxe
COUNT(*) FILTER (WHERE condition) AS aliasÉquivaut a sum(case when condition then 1 else 0 end), mais plus lisible.
Exemple (table commandes) :
SELECT
COUNT(*) FILTER (WHERE statut = 'payee') AS payees,
COUNT(*) FILTER (WHERE statut = 'annulee') AS annulees
FROM commandes;
-> une seule ligne, une colonne par statutEnvie d'aller plus loin ? Découvrez nos formations certifiées Bac+2 à Bac+5 →