Leçon 1 / 9 — Chapitre 4: CASE WHEN et agrégation conditionnelle
Transformation conditionnelle : CASE WHEN
SELECT nom,
CASE
WHEN montant < 0 THEN 'remboursement'
ELSE 'achat'
END AS type_transaction
FROM clients;
CASE WHEN condition THEN valeur ... ELSE valeur_par_defaut END évalue les conditions dans l'ordre, et renvoie la valeur associée à la première condition vraie ; ELSE couvre tous les cas restants.
Avec plusieurs branches :
SELECT CASE
WHEN montant >= 100 THEN 'gros montant'
WHEN montant >= 0 THEN 'petit montant'
ELSE 'remboursement'
END
FROM clients WHERE id = 2;
À retenir :
CASE WHEN cond1 THEN val1 WHEN cond2 THEN val2 ELSE valdef ENDrenvoie la valeur de la première condition vraie.- Les conditions sont testées dans l'ordre d'écriture ; une fois une condition vraie trouvée, les suivantes ne sont plus évaluées.
ELSEcapture tous les cas non couverts par lesWHENprécédents.
À vous de jouer : ajoutez une branche WHEN montant = 0 THEN 'gratuit' et réfléchissez à son ordre par rapport aux autres conditions.
À vous de jouer
À faireVoici une table clients :
clients
id | nom | email | date_inscription | montant | statut
1 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
2 | LUCAS | lucas@mail.com | 2024-04-02 | 85.2 | actif
3 | Nina | (NULL) | 2024-04-02 | 200 | inactif
4 | noé | noe@mail.com | (NULL) | 60.75 | actif
5 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
6 | Sophie | sophie@mail.com | 2024-05-20 | -150 | inactif
Que retourne SELECT CASE WHEN montant < 0 THEN 'remboursement' ELSE 'achat' END FROM clients WHERE id = 6; ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Un mot.
À vous de jouer
À faireVoici une table clients :
clients
id | nom | email | date_inscription | montant | statut
1 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
2 | LUCAS | lucas@mail.com | 2024-04-02 | 85.2 | actif
3 | Nina | (NULL) | 2024-04-02 | 200 | inactif
4 | noé | noe@mail.com | (NULL) | 60.75 | actif
5 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
6 | Sophie | sophie@mail.com | 2024-05-20 | -150 | inactif
Que retourne la même requête SELECT CASE WHEN montant < 0 THEN 'remboursement' ELSE 'achat' END FROM clients WHERE id = 1; ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Un mot.
À vous de jouer
À faireVoici une table clients :
clients
id | nom | email | date_inscription | montant | statut
1 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
2 | LUCAS | lucas@mail.com | 2024-04-02 | 85.2 | actif
3 | Nina | (NULL) | 2024-04-02 | 200 | inactif
4 | noé | noe@mail.com | (NULL) | 60.75 | actif
5 | Emma | emma@mail.com | 2024-03-15 | 120.456 | actif
6 | Sophie | sophie@mail.com | 2024-05-20 | -150 | inactif
Que retourne SELECT CASE WHEN montant >= 100 THEN 'gros montant' WHEN montant >= 0 THEN 'petit montant' ELSE 'remboursement' END FROM clients WHERE id = 2; ?
Testez cette requête dans un bac à sable SQL en ligne (SQLite Fiddle, W3Schools "Try SQL", ou tout autre) pour vérifier le résultat avant de répondre.
💡 Deux mots.