Menu
Coddy logo textTech

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 users

SUM(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.

challenge icon

Défi

Facile

Tables 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 :

  • category
  • net_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 users

SUM(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
quiz iconTestez-vous

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