PaliSkill
SQL avancé

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 END renvoie 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.
  • ELSE capture tous les cas non couverts par les WHEN pré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

À faire

Voici 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

À faire

Voici 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

À faire

Voici 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.

Quitter le module