SUM avec CASE
Fait partie de la section Au-delà des bases du Journey SQL de Coddy — leçon 13 sur 27.
La même idée fonctionne avec SUM : et c'est encore plus flexible. Le CASE peut retourner 1 pour les lignes correspondantes et 0 pour tout le reste, ou il peut retourner n'importe quelle valeur numérique pour pondérer les lignes différemment.
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) et COUNT(CASE … THEN 1 END) donnent le même résultat pour le comptage ; choisissez le style que votre équipe préfère.
Défi
FacileTables et colonnes disponibles :
<strong>transactions</strong>:<strong>id</strong>,<strong>category</strong>,<strong>type</strong>,<strong>amount</strong>
type est soit 'sale' soit 'refund'. Pour chaque category, retournez :
categorynet_revenue: la somme des montants de vente (sale) moins la somme des montants de remboursement (refund)
Calculez net_revenue dans une seule expression SUM(CASE …) où les remboursements contribuent à leur montant sous forme de nombre négatif. Triez par net_revenue décroissant.
Aide-mémoire
Utilisez SUM avec CASE pour agréger des valeurs de manière conditionnelle — retournez 1/0 pour le comptage, ou les valeurs réelles pour les sommes pondérées :
SELECT
SUM(CASE WHEN status = 'active' THEN 1 ELSE 0 END) AS active_count,
SUM(CASE WHEN plan = 'pro' THEN amount ELSE 0 END) AS pro_revenue
FROM usersSUM(CASE … THEN 1 ELSE 0 END) et COUNT(CASE … THEN 1 END) produisent le même résultat de comptage.
Essayez vous-même
SELECT category,
-- un SUM(CASE ...) où les remboursements comptent négativement
FROM transactions
GROUP BY category
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Au-delà des bases
1Logique conditionnelle
CASE WHENCASE dans ORDER BYCOALESCE pour les NULLsNULLIF et IIFRécapitulatif - Présences3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter des lignes en colonnesRécapitulatif - Sources de trafic