SQL Academy · Les

ROLLUP voor subtotalen

Bereken lopende subtotalen en eindtotalen.

Les 2 van 413 stappen

ROLLUP voor subtotalen is een gratis SQL Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.

Wat is ROLLUP?

Wanneer je gegevens groepeert met GROUP BY, krijg je één rij per groep. Vaak wil je echter ook subtotalen voor elke groep en een eindtotaal voor alle rijen. Dat is precies wat ROLLUP doet.

ROLLUP is een uitbreiding van GROUP BY die automatisch extra samenvattingsrijen aan je resultaatset toevoegt. Zo krijg je subtotalen op elk niveau van de groeperingshiërarchie en aan het einde een definitief eindtotaal.

Voorbeeldgegevens instellen

We maken een eenvoudige sales-tabel om mee te oefenen. De tabel bevat de regio, productcategorie en het verkoopbedrag voor elke transactie. Voer de onderstaande instructies uit om de tabel aan te maken en te vullen.

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);

Eerst een gewone GROUP BY

Voordat we ROLLUP gebruiken, bekijken we wat een gewone GROUP BY oplevert. De onderstaande query geeft één totaal per paar (region, category) — geen subtotalen en geen eindtotaal.

SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY region, category
ORDER  BY region, category;

Kennismaken met GROUP BY ROLLUP

Vervang GROUP BY door GROUP BY ROLLUP(...) en SQL voegt automatisch subtotalenrijen toe. De kolommen binnen ROLLUP() vormen een hiërarchie. Voor elk niveau van die hiërarchie wordt een subtotaal geproduceerd, gevolgd door een eindtotaal.

SELECT region, category, SUM(amount) AS total
FROM   sales
GROUP  BY ROLLUP(region, category)
ORDER  BY region, category;

De uitvoer van ROLLUP lezen

Het resultaat van ROLLUP bevat drie soorten rijen:

  • Detailrijen — één rij per combinatie van (region, category), net als bij een gewone GROUP BY.
  • Subtotalenrijen — één rij per regio met category = NULL, waarin het regionale totaal wordt weergegeven.
  • Rij met het eindtotaal — één rij waarin zowel region als category NULL zijn, met het totale eindbedrag.

De NULL-waarden fungeren als tijdelijke aanduidingen die het samenvattingsniveau markeren.

COALESCE gebruiken om NULL-waarden te labelen

De NULL-markeringen kunnen voor eindgebruikers verwarrend zijn. Zet elke kolom in COALESCE om ze te vervangen door betekenisvolle labels, zoals 'Alle categorieën' en 'Eindtotaal'.

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 met één kolom

ROLLUP werkt ook met slechts één kolom. Wanneer je ROLLUP(region) schrijft, krijg je één rij per regio, plus aan het einde één rij met het eindtotaal. Dit is de eenvoudigste vorm en is handig voor elk rapport dat onder de detailrijen een cumulatief totaal nodig heeft.

SELECT
  COALESCE(region, 'Grand Total') AS region,
  SUM(amount)                     AS total
FROM   sales
GROUP  BY ROLLUP(region)
ORDER  BY region;

ROLLUP met drie niveaus

Je kunt drie of meer kolommen aan ROLLUP doorgeven om diepere hiërarchieën op te bouwen. Met ROLLUP(year, region, category) krijg je subtotalen per jaar en regio, subtotalen per jaar en een eindtotaal — elke extra kolom voegt een nieuw samenvattingsniveau toe.

-- 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;

Samenvattingsrijen detecteren met GROUPING()

De functie GROUPING() geeft 1 terug wanneer de kolomwaarde in die rij een door ROLLUP gegenereerde NULL is, dus een tijdelijke aanduiding voor een samenvatting, en 0 wanneer het om een echte gegevenswaarde gaat. Zo kun je echte NULL-gegevens onderscheiden van NULL-waarden voor rollupsamenvattingen.

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;

Filteren op samenvattingsrijen

Omdat ROLLUP rijen na de aggregatie toevoegt, kun je ze niet met WHERE filteren. Gebruik HAVING of plaats de volledige query in een subquery. In het onderstaande voorbeeld blijven alleen de regionale subtotalen over: rijen waarin category een door ROLLUP gegenereerde NULL is, maar region een echte waarde heeft.

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 versus GROUPING SETS

ROLLUP(a, b) is een verkorte notatie voor een specifieke verzameling GROUPING SETS. De twee onderstaande query's zijn precies equivalent — ROLLUP bespaart je het handmatig uitschrijven van elk groeperingsniveau.

-- 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),
  ()
);

Korte controle

Test je begrip van ROLLUP met deze vraag.

Samenvatting van de les

Goed gedaan! Hier volgt een samenvatting van wat je over ROLLUP hebt geleerd:

  • GROUP BY ROLLUP(a, b) genereert automatisch subtotalen voor elk niveau van de kolomhiërarchie en een eindtotaal voor alle rijen.
  • Samenvattingsrijen worden in de opgerolde kolommen gemarkeerd met NULL. Gebruik COALESCE om ze leesbare labels te geven.
  • De functie GROUPING() geeft 1 terug voor door ROLLUP gegenereerde NULL-waarden en 0 voor echte gegevenswaarden, zodat je ze van elkaar kunt onderscheiden.
  • Gebruik HAVING GROUPING(...) = 1 om alleen de samenvattingsrijen te selecteren.
  • ROLLUP(a, b) is een verkorte notatie voor GROUPING SETS((a, b), (a), ()).

ROLLUP is het aangewezen hulpmiddel wanneer je rapport subtotalen en een eindtotaal nodig heeft zonder complexe UNION-query's te schrijven.

Gratis beginnen

Leer SQL met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
46
Lessen
183

Veelgestelde vragen

Is de les “ROLLUP voor subtotalen” gratis?

Ja — de volledige tekst van “ROLLUP voor subtotalen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.

Wat leer ik in “ROLLUP voor subtotalen”?

Bereken lopende subtotalen en eindtotalen. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met SQL Academy te beginnen?

Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.

Hoe lang duurt de les “ROLLUP voor subtotalen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over SQL Academy?

Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Verder dan één GROUP BY
  2. ROLLUP voor subtotalen
  3. CUBE voor alle combinaties
  4. GROUPING SETS uitgelegd
← Terug naar SQL Academy