PaliSkill
SQL avancé

Leçon 3 / 9 — Chapitre 6: Regroupements avancés

GROUPING SETS : plusieurs regroupements en une requête

GROUP BY GROUPING SETS (...) calcule plusieurs regroupements différents en une seule requête, plutôt qu'un seul — le résultat empile les lignes de chaque regroupement demandé.

SELECT statut, CASE WHEN montant >= 0 THEN 'positif' ELSE 'negatif' END AS signe, COUNT(*) AS nb
FROM clients
GROUP BY GROUPING SETS ((statut), (CASE WHEN montant >= 0 THEN 'positif' ELSE 'negatif' END), ());

Cette requête empile trois regroupements : par statut seul (actif = 4, inactif = 2), par signe seul (positif = 5, negatif = 1, seul le client 6 avec montant = -150 étant négatif), et un total général sans aucun regroupement ((), nb = 6). Résultat : 2 + 2 + 1 = 5 lignes.

Dans les lignes issues d'un regroupement qui n'utilise pas une colonne donnée (par exemple, les lignes du regroupement par signe n'utilisent pas statut), cette colonne apparaît à NULL.

À retenir :

  • GROUPING SETS ((a), (b), ()) calcule un regroupement par a, un par b, et un total général, empilés dans un seul résultat.
  • Chaque parenthèse de GROUPING SETS définit un regroupement indépendant ; () (parenthèses vides) représente le total général, sans aucune colonne de regroupement.
  • Une colonne non utilisée par un regroupement donné apparaît à NULL dans les lignes issues de ce regroupement.

À vous de jouer : combien de lignes ce résultat contient-il avec la valeur nb égale à 6 ?

🔒

Continuez ce module

Débloquez les leçons restantes ainsi que la certification finale.

2 500 XOF / 3,81 € / 4,15 $

Débloquez les 80 leçons restantes de ce module

Votre paiement est vérifié avant l'activation de l'accès