PaliSkill
SQL avancé

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

CUBE : toutes les combinaisons de regroupement

CUBE (a, b) calcule toutes les combinaisons possibles de regroupement entre les colonnes fournies — contrairement à ROLLUP, qui suppose une hiérarchie, CUBE ne privilégie aucun ordre.

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

CUBE (statut, signe) produit 4 familles de regroupement : par (statut, signe) ensemble, par statut seul, par signe seul, et le total général — soit toutes les combinaisons possibles des deux colonnes, y compris l'absence des deux.

Sur ces données : le détail (statut, signe) donne 3 lignes non vides (actif/positif = 4, inactif/positif = 1, inactif/negatif = 1 — aucun client actif n'est négatif) ; statut seul donne 2 lignes (actif = 4, inactif = 2) ; signe seul donne 2 lignes (positif = 5, negatif = 1) ; le total général donne 1 ligne (6). Soit 3 + 2 + 2 + 1 = 8 lignes.

À retenir :

  • CUBE (a, b) calcule toutes les combinaisons de regroupement entre les colonnes fournies : (a, b), (a), (b), et ().
  • Contrairement à ROLLUP, CUBE ne suppose aucune hiérarchie entre les colonnes : un regroupement par b seul existe, même sans a.
  • Une combinaison de valeurs qui n'a aucune ligne correspondante dans les données (ici, actif + negatif) ne produit tout simplement aucune ligne dans le résultat.

À vous de jouer : combien de lignes ce résultat contient-il au total, et laquelle correspond au total général ?

🔒

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