0Pricing
SQL Academy · Leçon

CASE dans ORDER BY et les agrégations

Tri et comptage conditionnels.

CASE dans ORDER BY et les agrégations est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 4 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.

Trier selon une priorité personnalisée

La clause ORDER BY de SQL trie normalement les lignes selon la valeur naturelle d’une colonne. Mais vous pouvez intégrer une expression CASE dans ORDER BY pour créer un ordre de tri entièrement personnalisé, qu’aucune colonne seule ne pourrait produire.

Cette technique est puissante lorsque les règles métier déterminent la priorité plutôt que les valeurs brutes des données.

SELECT product_name, status
FROM products
ORDER BY
  CASE status
    WHEN 'urgent'   THEN 1
    WHEN 'active'   THEN 2
    WHEN 'pending'  THEN 3
    ELSE                 4
  END;

Fonctionnement de CASE dans ORDER BY

Lorsque la base de données évalue ORDER BY CASE ... END, elle calcule un entier (ou toute autre valeur comparable) pour chaque ligne. Les lignes sont ensuite triées selon cette valeur calculée, au lieu d’une colonne brute ou en plus de celle-ci.

L’expression CASE n’est pas stockée ; elle n’existe que pendant l’exécution de la requête.

SELECT order_id, priority
FROM orders
ORDER BY
  CASE priority
    WHEN 'high'   THEN 1
    WHEN 'medium' THEN 2
    WHEN 'low'    THEN 3
    ELSE               9
  END,
  order_id;

Trier explicitement les valeurs NULL

Par défaut, les différentes bases de données placent les valeurs NULL au début ou à la fin d’un résultat trié, selon des règles différentes. Un CASE dans ORDER BY vous permet de décider exactement où placer les valeurs NULL, quel que soit le moteur de base de données.

SELECT employee_name, manager_id
FROM employees
ORDER BY
  CASE WHEN manager_id IS NULL THEN 0 ELSE 1 END,
  manager_id;

Tri croissant et décroissant conditionnel

Un CASE dans ORDER BY peut également simuler une direction conditionnelle. En associant les valeurs des catégories à des nombres négatifs, vous pouvez inverser efficacement l’ordre de tri pour certains groupes tout en conservant l’ordre normal pour les autres.

Cela est utile lorsque différents types de lignes nécessitent des règles de tri différentes dans un même ensemble de résultats.

SELECT task_name, due_date, is_overdue
FROM tasks
ORDER BY
  CASE WHEN is_overdue = 1 THEN 0 ELSE 1 END,
  due_date;

CASE dans COUNT

Vous pouvez intégrer une expression CASE dans une fonction d’agrégation comme COUNT. L’astuce consiste à renvoyer une valeur non NULL pour les lignes à compter et NULL pour les lignes à ignorer, car COUNT ignore les valeurs NULL.

SELECT
  COUNT(CASE WHEN status = 'active'   THEN 1 END) AS active_count,
  COUNT(CASE WHEN status = 'inactive' THEN 1 END) AS inactive_count
FROM users;

CASE dans SUM — totaux conditionnels

Placer CASE dans SUM permet d’additionner les valeurs uniquement lorsqu’une condition est vraie et de traiter les lignes qui ne correspondent pas comme des zéros. Il s’agit d’un schéma très courant pour les rapports de type tableau croisé qui répartissent une seule colonne entre plusieurs colonnes de mesures.

SELECT
  SUM(CASE WHEN region = 'North' THEN sales_amount ELSE 0 END) AS north_total,
  SUM(CASE WHEN region = 'South' THEN sales_amount ELSE 0 END) AS south_total,
  SUM(CASE WHEN region = 'East'  THEN sales_amount ELSE 0 END) AS east_total
FROM sales;

AVG conditionnel avec CASE

Le même schéma fonctionne avec AVG. Comme AVG ignore les valeurs NULL, renvoyer NULL pour les lignes à exclure produit la moyenne des seules lignes correspondantes, sans sous-requête.

SELECT
  AVG(CASE WHEN department = 'Engineering' THEN salary END) AS avg_eng_salary,
  AVG(CASE WHEN department = 'Marketing'   THEN salary END) AS avg_mkt_salary
FROM employees;

Regrouper avec CASE — catégoriser les lignes

Vous pouvez utiliser CASE dans la liste GROUP BY ou SELECT pour répartir des valeurs continues en catégories, puis agréger chaque catégorie. Cela transforme une colonne numérique en groupes libellés sans modifier les données sous-jacentes.

SELECT
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END AS age_group,
  COUNT(*) AS user_count
FROM users
GROUP BY
  CASE
    WHEN age < 18             THEN 'Under 18'
    WHEN age BETWEEN 18 AND 35 THEN '18-35'
    WHEN age BETWEEN 36 AND 55 THEN '36-55'
    ELSE                            '56+'
  END;

Utiliser un alias ou répéter CASE

Répéter une longue expression CASE dans SELECT et GROUP BY est verbeux. Certaines bases de données (MySQL, PostgreSQL avec des solutions de contournement) vous permettent de faire référence à l’alias dans ORDER BY, mais pas dans GROUP BY. L’approche portable la plus sûre consiste à placer la requête dans une sous-requête ou un CTE, puis à utiliser GROUP BY sur l’alias depuis cette sous-requête.

WITH scored AS (
  SELECT
    customer_id,
    CASE
      WHEN total_spent >= 1000 THEN 'Gold'
      WHEN total_spent >= 500  THEN 'Silver'
      ELSE                          'Bronze'
    END AS tier
  FROM customers
)
SELECT tier, COUNT(*) AS customer_count
FROM scored
GROUP BY tier
ORDER BY
  CASE tier
    WHEN 'Gold'   THEN 1
    WHEN 'Silver' THEN 2
    ELSE               3
  END;

Combiner ORDER BY CASE avec ASC / DESC

Après l’expression CASE, vous pouvez toujours ajouter ASC ou DESC et ajouter d’autres colonnes de tri séparées par des virgules. Le score CASE est simplement la première clé de tri ; les colonnes suivantes départagent les ex æquo de la manière habituelle.

SELECT
  ticket_id,
  category,
  created_at
FROM support_tickets
ORDER BY
  CASE category
    WHEN 'billing'  THEN 1
    WHEN 'outage'   THEN 2
    WHEN 'feature'  THEN 3
    ELSE                 4
  END ASC,
  created_at ASC;

Exemple concret — Tableau de bord des ventes

Voici une requête réaliste qui combine un agrégat fondé sur CASE et un tri fondé sur CASE. Elle produit un récapitulatif des ventes par région, classé de sorte que la région aux revenus les plus élevés apparaisse toujours en premier, tandis que « Autre » est placé à la fin.

SELECT
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END AS region_label,
  SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales,
  COUNT(CASE WHEN status = 'refunded' THEN 1 END)           AS refund_count
FROM orders
GROUP BY
  CASE
    WHEN region IN ('North', 'South', 'East', 'West') THEN region
    ELSE 'Other'
  END
ORDER BY completed_sales DESC;

Vérification des connaissances

Vérifiez votre compréhension de l'utilisation de CASE dans ORDER BY et les fonctions d'agrégation.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris à combiner CASE avec ORDER BY et les fonctions d'agrégation :

  • CASE dans ORDER BY — attribuer des scores de tri personnalisés aux lignes, contrôler la position des NULL et combiner plusieurs règles de tri dans une même requête.
  • CASE dans COUNT — renvoyer une valeur non NULL pour les lignes à inclure, et NULL (implicitement ou explicitement) pour celles à ignorer.
  • CASE dans SUM / AVG — utiliser 0 ou NULL comme valeur ELSE afin de calculer des totaux et des moyennes conditionnels en une seule passe.
  • CASE dans GROUP BY — regrouper des valeurs continues ou catégorielles en groupes nommés pour l'agrégation.

Ces méthodes évitent de nombreuses sous-requêtes et permettent d'écrire facilement des rapports de type tableau croisé directement en SQL.

Questions Fréquemment Posées

La leçon « CASE dans ORDER BY et les agrégations » est-elle gratuite ?

Oui — le texte complet de « CASE dans ORDER BY et les agrégations » 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 « CASE dans ORDER BY et les agrégations » ?

Tri et comptage conditionnels. 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 4 sur 4.

Combien de temps prend la leçon « CASE dans ORDER BY et les agrégations » ?

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

  1. L’expression CASE
  2. CASE recherché ou simple
  3. Regrouper et étiqueter les données
  4. CASE dans ORDER BY et les agrégations
← Retour à SQL Academy