Expressions CASE et requêtes pivot
Utilisez CASE WHEN dans les agrégats pour transformer des tables longues en rapports croisés larges.
Expressions CASE et requêtes pivot est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.
CASE : l’équivalent intégré de Si/Sinon pour SQL
CASE est l’opérateur ternaire de SQL. Il existe sous deux formes :
-- Searched CASE
CASE WHEN x > 0 THEN 'positive'
WHEN x < 0 THEN 'negative'
ELSE 'zero' END
-- Simple CASE
CASE status
WHEN 'A' THEN 'active'
WHEN 'P' THEN 'pending'
ELSE 'unknown'
ENDCASE dans SELECT
Calculez une colonne dérivée :
SELECT id, total,
CASE
WHEN total >= 1000 THEN 'whale'
WHEN total >= 100 THEN 'regular'
ELSE 'small'
END AS bucket
FROM orders;CASE dans WHERE et ORDER BY
Filtrage et tri personnalisés :
-- Custom sort:
ORDER BY
CASE WHEN status = 'urgent' THEN 0 ELSE 1 END,
created_at DESC;
-- Conditional filter:
WHERE CASE WHEN $1 = 'paid' THEN status = 'paid'
ELSE status IN ('pending','paid')
END;CASE dans les agrégats : comptages conditionnels
L’astuce classique pour créer un tableau croisé :
SELECT user_id,
COUNT(*) AS total,
SUM(CASE WHEN status = 'paid' THEN 1 ELSE 0 END) AS paid,
SUM(CASE WHEN status = 'pending' THEN 1 ELSE 0 END) AS pending,
SUM(CASE WHEN status = 'cancelled' THEN 1 ELSE 0 END) AS cancelled
FROM orders
GROUP BY user_id;FILTER : une alternative plus lisible
La clause FILTER de PostgreSQL est plus lisible :
SELECT user_id,
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'paid') AS paid,
COUNT(*) FILTER (WHERE status = 'pending') AS pending,
COUNT(*) FILTER (WHERE status = 'cancelled') AS cancelled
FROM orders
GROUP BY user_id;Pivoter les mois en colonnes
Convertissez un format long en format large avec CASE et un agrégat :
SELECT year,
SUM(CASE WHEN month = 1 THEN revenue END) AS jan,
SUM(CASE WHEN month = 2 THEN revenue END) AS feb,
-- ...
SUM(CASE WHEN month = 12 THEN revenue END) AS dec
FROM monthly_revenue
GROUP BY year
ORDER BY year;Pivoter les catégories
Une ligne par utilisateur, une colonne par statut :
SELECT user_id,
SUM(total) FILTER (WHERE status = 'paid') AS paid_total,
SUM(total) FILTER (WHERE status = 'pending') AS pending_total
FROM orders GROUP BY user_id;Limites des tableaux croisés avec CASE
Vous devez connaître les colonnes cibles au moment d’écrire la requête. Pour les tableaux croisés dynamiques, générez le SQL dans l’application ou utilisez le langage procédural PL/pgSQL.
CASE ou COALESCE / NULLIF
COALESCE signifie « premier élément non-NULL ». NULLIF signifie « NULL si les valeurs sont égales ». CASE est plus général : utilisez-le lorsque COALESCE ou NULLIF ne conviennent pas.
Compatibilité des types
Toutes les branches de CASE doivent produire des types compatibles. Effectuez une conversion explicite si vous mélangez les types :
SELECT CASE WHEN x THEN 1::TEXT ELSE 'no' END;CASE imbriqué
Branchement à plusieurs niveaux :
SELECT CASE
WHEN amount IS NULL THEN 'no payment'
WHEN amount = 0 THEN 'free'
WHEN amount < 10 THEN 'cheap'
ELSE
CASE WHEN paid_at IS NULL THEN 'overdue' ELSE 'paid' END
END AS status FROM invoices;Récapitulatif
CASE est l’équivalent universel de « si/sinon » en SQL.
- Colonnes calculées dans SELECT
- Tableaux croisés avec CASE dans un agrégat ou avec FILTER
- Logique personnalisée dans WHERE et ORDER BY
Vérification rapide
Quelle clause est la plus lisible pour effectuer une agrégation conditionnelle dans PostgreSQL ?
Questions Fréquemment Posées
La leçon « Expressions CASE et requêtes pivot » est-elle gratuite ?
Oui — le texte complet de « Expressions CASE et requêtes pivot » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Expressions CASE et requêtes pivot » ?
Utilisez CASE WHEN dans les agrégats pour transformer des tables longues en rapports croisés larges. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer SQL Academy ?
Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Expressions CASE et requêtes pivot » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?
Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- UNION, INTERSECT, EXCEPT
- UNION ALL contre UNION (coût de la déduplication)
- Expressions CASE et requêtes pivot
- Modèles de tableaux croisés (PostgreSQL crosstab())