ROLLUP für Zwischensummen
Laufende Zwischen- und Gesamtsummen
ROLLUP für Zwischensummen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was ist ROLLUP?
Wenn Sie Daten mit GROUP BY gruppieren, erhalten Sie eine Zeile pro Gruppe. Oft benötigen Sie zusätzlich Zwischensummen für jede Gruppe und eine Gesamtsumme für alle Zeilen. Genau das leistet ROLLUP.
ROLLUP ist eine Erweiterung von GROUP BY, die Ihrer Ergebnismenge automatisch zusätzliche Zusammenfassungszeilen hinzufügt. Dadurch erhalten Sie auf jeder Ebene der Gruppierungshierarchie eine Zwischensumme und am Ende eine abschließende Gesamtsumme.
Beispieldaten einrichten
Erstellen Sie eine einfache Tabelle sales, mit der Sie üben können. Sie speichert für jeden Vorgang die Region, die Produktkategorie und den Verkaufsbetrag. Führen Sie die folgenden Anweisungen aus, um die Tabelle zu erstellen und zu befüllen.
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);Zuerst ein einfaches GROUP BY
Bevor Sie ROLLUP verwenden, sehen Sie sich an, was ein reguläres GROUP BY liefert. Die folgende Abfrage gibt eine Summe pro Paar aus (region, category) zurück – keine Zwischensummen und keine Gesamtsumme.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY region, category
ORDER BY region, category;Einführung in GROUP BY ROLLUP
Ersetzen Sie GROUP BY durch GROUP BY ROLLUP(...), und SQL fügt automatisch Zeilen mit Zwischensummen hinzu. Die Spalten innerhalb von ROLLUP() bilden eine Hierarchie. Für jede Ebene dieser Hierarchie sowie für die abschließende Gesamtsumme wird eine Zwischensumme erzeugt.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region, category)
ORDER BY region, category;Die ROLLUP-Ausgabe lesen
Das ROLLUP-Ergebnis enthält drei Arten von Zeilen:
- Detailzeilen – eine Zeile pro Kombination aus (region, category), genau wie bei einem einfachen GROUP BY.
- Zwischensummen – eine Zeile pro region mit
category = NULL, die die Summe der jeweiligen Region zeigt. - Gesamtsumme – eine Zeile, in der sowohl region als auch category den Wert
NULLhaben und die die Gesamtsumme anzeigt.
Die NULL-Werte dienen als Platzhalter und kennzeichnen die zusammengefasste Ebene.
NULL-Werte mit COALESCE beschriften
Die NULL-Markierungen können für Endbenutzer verwirrend wirken. Umschließen Sie jede Spalte mit COALESCE, um sie durch aussagekräftige Bezeichnungen wie 'Alle Kategorien' und 'Gesamtsumme' zu ersetzen.
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 mit einer Spalte
ROLLUP funktioniert auch mit nur einer Spalte. Wenn Sie ROLLUP(region) schreiben, erhalten Sie eine Zeile pro Region sowie am Ende eine einzelne Zeile mit der Gesamtsumme. Dies ist die einfachste Form und eignet sich für jeden Bericht, der unter den Detailzeilen eine fortlaufende Summe benötigt.
SELECT
COALESCE(region, 'Grand Total') AS region,
SUM(amount) AS total
FROM sales
GROUP BY ROLLUP(region)
ORDER BY region;ROLLUP mit drei Ebenen
Sie können ROLLUP drei oder mehr Spalten übergeben, um tiefere Hierarchien zu erstellen. Mit ROLLUP(year, region, category) erhalten Sie Zwischensummen für die Kombination aus year und region, Zwischensummen pro year sowie eine Gesamtsumme – jede zusätzliche Spalte fügt eine weitere Zusammenfassungsebene hinzu.
-- 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;Zusammenfassungszeilen mit GROUPING() erkennen
Die Funktion GROUPING() gibt 1 zurück, wenn der Spaltenwert in dieser Zeile ein von ROLLUP erzeugtes NULL ist (ein Platzhalter für eine Zusammenfassung), und 0, wenn es sich um einen echten Datenwert handelt. So können Sie echte NULL-Datenwerte von den NULL-Werten der ROLLUP-Zusammenfassung unterscheiden.
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;Nach Zusammenfassungszeilen filtern
Da ROLLUP nach der Aggregation Zeilen hinzufügt, können Sie diese nicht mit WHERE filtern. Verwenden Sie HAVING oder kapseln Sie die gesamte Abfrage in einer Unterabfrage. Das folgende Beispiel behält nur die regionalen Zwischensummen bei, also Zeilen, in denen category ein von ROLLUP erzeugtes NULL ist, region jedoch einen echten Wert enthält.
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 vs. GROUPING SETS
ROLLUP(a, b) ist eine Kurzform für eine bestimmte Zusammenstellung von GROUPING SETS. Die beiden folgenden Abfragen sind exakt gleichwertig – ROLLUP erspart Ihnen lediglich, jede Gruppierungsebene von Hand auszuschreiben.
-- 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),
()
);Kurzer Wissenstest
Testen Sie Ihr Verständnis von ROLLUP mit dieser Frage.
Zusammenfassung der Lektion
Gute Arbeit! Hier ist eine Zusammenfassung dessen, was Sie über ROLLUP gelernt haben:
- GROUP BY ROLLUP(a, b) erzeugt automatisch Zwischensummen für jede Ebene der Spaltenhierarchie sowie eine Gesamtsumme für alle Zeilen.
- Zusammenfassungszeilen werden in den aufgerollten Spalten mit NULL gekennzeichnet. Verwenden Sie COALESCE, um ihnen verständliche Bezeichnungen zu geben.
- Die Funktion GROUPING() gibt für von ROLLUP erzeugte NULL-Werte 1 und für echte Datenwerte 0 zurück, sodass Sie beide unterscheiden können.
- Verwenden Sie HAVING GROUPING(...) = 1, um nur die Zusammenfassungszeilen zu filtern.
- ROLLUP(a, b) ist eine Kurzform für GROUPING SETS((a, b), (a), ()).
ROLLUP ist das bevorzugte Werkzeug, wenn Ihr Bericht Zwischensummen und eine Gesamtsumme benötigt, ohne dass Sie komplexe UNION-Abfragen schreiben müssen.
Häufig gestellte Fragen
Ist die Lektion „ROLLUP für Zwischensummen“ kostenlos?
Ja — der vollständige Text von „ROLLUP für Zwischensummen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „ROLLUP für Zwischensummen“?
Laufende Zwischen- und Gesamtsummen Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „ROLLUP für Zwischensummen“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Über ein einzelnes GROUP BY hinaus
- ROLLUP für Zwischensummen
- CUBE für alle Kombinationen
- GROUPING SETS erklärt