PaliSkill
SQL avancé

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

La fonction GROUPING() : distinguer un sous-total d'un NULL réel

Une ligne de sous-total ou de total général (issue de ROLLUP, CUBE ou GROUPING SETS) affiche NULL dans une colonne non utilisée par ce regroupement — mais une vraie valeur NULL dans les données produirait exactement le même affichage. GROUPING(colonne) lève cette ambiguïté : elle renvoie 1 si la ligne est un sous-total pour cette colonne, 0 si c'est une vraie valeur (même si cette valeur est elle-même NULL).

SELECT statut, GROUPING(statut) AS est_sous_total, COUNT(*) AS nb
FROM clients
GROUP BY ROLLUP (statut);

Résultat : ('actif', 0, 4), ('inactif', 0, 2), (NULL, 1, 6). La troisième ligne a GROUPING(statut) = 1 : son NULL signifie « ceci est un total général », pas « le statut de ces clients est inconnu ».

À retenir :

  • GROUPING(colonne) renvoie 1 si la ligne est un sous-total ou un total général pour cette colonne, 0 si c'est une valeur réelle des données.
  • Cette fonction permet de distinguer, dans un résultat avec ROLLUP/CUBE/GROUPING SETS, un NULL de sous-total d'un NULL réellement présent dans les données.
  • Sans GROUPING(), les deux cas sont visuellement indiscernables dans le résultat.

À vous de jouer : quelle est la valeur de GROUPING(statut) pour la ligne concernant les clients 'actif' ?

🔒

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