ROLLUP pour les sous-totaux
Calculez les sous-totaux cumulés et les totaux généraux.
ROLLUP pour les sous-totaux est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 2 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.
Qu'est-ce que ROLLUP ?
Lorsque vous regroupez des données avec GROUP BY, vous obtenez une ligne par groupe. Mais vous souhaitez souvent aussi obtenir des sous-totaux pour chaque groupe et un total général pour toutes les lignes. C'est précisément ce que fait ROLLUP.
ROLLUP est une extension de GROUP BY qui ajoute automatiquement des lignes de synthèse à votre résultat, avec des sous-totaux cumulatifs à chaque niveau de la hiérarchie de regroupement, puis un total général final.
Configuration des données d'exemple
Nous allons créer une simple table ventes pour nous exercer. Elle stocke la région, la catégorie de produit et le montant de chaque transaction. Exécutez les instructions ci-dessous pour la créer et la remplir.
CREATE TABLE sales (
region TEXT,
category TEXT,
amount NUMERIC
);
INSERT INTO sales VALUES
('East', 'Electronics', 500),
('East', 'Electronics', 300),
('East', 'Clothing', 150),
('West', 'Electronics', 700),
('West', 'Clothing', 200),
('West', 'Clothing', 100);Commencer par un GROUP BY simple
Avant d'utiliser ROLLUP, voyons ce que nous fournit un GROUP BY ordinaire. La requête ci-dessous renvoie un total pour chaque paire (région, catégorie), sans sous-total ni total général.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY region, category
ORDER BY region, category;Présentation de GROUP BY ROLLUP
Remplacez GROUP BY par GROUP BY ROLLUP(...) et SQL ajoutera automatiquement les lignes de sous-total. Les colonnes placées dans ROLLUP() forment une hiérarchie, et un sous-total est produit pour chaque niveau de cette hiérarchie, ainsi qu'un total général final.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;Lire le résultat de ROLLUP
Le résultat de ROLLUP contient trois types de lignes :
- Lignes détaillées — une ligne pour chaque combinaison (région, catégorie), comme avec un GROUP BY simple.
- Lignes de sous-total — une ligne par région avec
category = NULL, indiquant le total de la région. - Ligne du total général — une ligne où la région et la catégorie valent toutes deux
NULL, indiquant le total global.
Les valeurs NULL servent de marqueurs pour indiquer le niveau récapitulé.
Utiliser COALESCE pour étiqueter les valeurs NULL
Les marqueurs NULL peuvent sembler déroutants pour les utilisateurs finaux. Entourez chaque colonne de COALESCE pour les remplacer par des étiquettes explicites telles que 'Toutes les catégories' et 'Total général'.
SELECT
COALESCE(region, 'Grand Total') AS region,
COALESCE(category, 'All Categories') AS category,
SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;ROLLUP sur une seule colonne
ROLLUP fonctionne également avec une seule colonne. Lorsque vous écrivez ROLLUP(region), vous obtenez une ligne par région, suivie d'une seule ligne de total général. Il s'agit de la forme la plus simple, pratique pour tout rapport nécessitant un total cumulatif sous les lignes détaillées.
SELECT
COALESCE(region, 'Grand Total') AS region,
SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region)
ORDER BY region;ROLLUP à trois niveaux
Vous pouvez transmettre trois colonnes ou davantage à ROLLUP pour créer des hiérarchies plus profondes. Avec ROLLUP(year, region, category), vous obtiendriez des sous-totaux par année et région, des sous-totaux par année, ainsi qu'un total général : chaque colonne supplémentaire ajoute un niveau de synthèse.
-- Extend the demo with a year column
SELECT
COALESCE(CAST(yr AS TEXT), 'All Years') AS year,
COALESCE(region, 'All Regions') AS region,
COALESCE(category, 'All Categories') AS category,
SUM(amount) AS total
FROM (
SELECT 2024 AS yr, region, category, amount FROM sales
UNION ALL
SELECT 2025 AS yr, region, category, amount FROM sales
) t
GROUP BY ROLLUP(yr, region, category)
ORDER BY yr, region, category;Détecter les lignes de synthèse avec GROUPING()
La fonction GROUPING() renvoie 1 lorsque la valeur de la colonne dans cette ligne est un NULL généré par ROLLUP (un marqueur de synthèse), et 0 lorsqu'il s'agit d'une valeur réelle des données. Vous pouvez ainsi distinguer les valeurs NULL réellement présentes dans les données de celles produites pour les synthèses par ROLLUP.
SELECT
region,
category,
SUM(amount) AS total,
GROUPING(region) AS is_region_summary,
GROUPING(category) AS is_cat_summary
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;Filtrer les lignes de synthèse
Comme ROLLUP ajoute des lignes après l'agrégation, vous ne pouvez pas les filtrer avec WHERE. Utilisez HAVING ou placez la requête entière dans une sous-requête. L'exemple ci-dessous ne conserve que les sous-totaux régionaux (les lignes où la catégorie est une valeur NULL de ROLLUP, mais où la région est une valeur réelle).
SELECT region, SUM(amount) AS regional_total
FROM sales
GROUP BY ROLLUP(region, category)
HAVING GROUPING(category) = 1
AND GROUPING(region) = 0
ORDER BY region;ROLLUP ou GROUPING SETS
ROLLUP(a, b) est une forme abrégée d'un ensemble précis de GROUPING SETS. Les deux requêtes ci-dessous sont strictement équivalentes : ROLLUP vous évite simplement d'écrire manuellement chaque niveau de regroupement.
-- Using ROLLUP (concise)
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category);
-- Equivalent explicit GROUPING SETS
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS(
(region, category),
(region),
()
);Vérification rapide
Évaluez votre compréhension de ROLLUP avec cette question.
Récapitulatif de la leçon
Excellent travail ! Voici un résumé de ce que vous avez appris sur ROLLUP :
- GROUP BY ROLLUP(a, b) génère automatiquement des sous-totaux pour chaque niveau de la hiérarchie des colonnes, ainsi qu'un total général pour toutes les lignes.
- Les lignes de synthèse sont marquées par NULL dans les colonnes regroupées à un niveau supérieur. Utilisez COALESCE pour leur attribuer des étiquettes lisibles.
- La fonction GROUPING() renvoie 1 pour les valeurs NULL générées par ROLLUP et 0 pour les valeurs réelles des données, ce qui permet de les distinguer.
- Utilisez HAVING GROUPING(...) = 1 pour ne filtrer que les lignes de synthèse.
- ROLLUP(a, b) est une forme abrégée de GROUPING SETS((a, b), (a), ()).
ROLLUP est l'outil de référence lorsque votre rapport nécessite des sous-totaux et un total général sans devoir écrire des requêtes UNION complexes.
Questions Fréquemment Posées
La leçon « ROLLUP pour les sous-totaux » est-elle gratuite ?
Oui — le texte complet de « ROLLUP pour les sous-totaux » 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 « ROLLUP pour les sous-totaux » ?
Calculez les sous-totaux cumulés et les totaux généraux. 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 2 sur 4.
Combien de temps prend la leçon « ROLLUP pour les sous-totaux » ?
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
- Au-delà d’un seul GROUP BY
- ROLLUP pour les sous-totaux
- CUBE pour toutes les combinaisons
- GROUPING SETS expliqué