GROUPING SETS erklärt
Genau die gewünschten Gruppierungen auswählen
GROUPING SETS erklärt ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 4 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 sind GROUPING SETS?
Wenn Sie eine GROUP BY-Klausel schreiben, legen Sie eine Spaltenkombination fest, nach der gruppiert wird. Manchmal benötigen Sie jedoch mehrere unterschiedliche Gruppierungen in einer einzigen Abfrage – ohne die Abfrage mehrmals auszuführen und UNION ALL zu verwenden.
Mit GROUPING SETS können Sie genau die gewünschten Gruppierungen angeben – in einem einzigen Durchlauf über die Daten. Jeder Satz in der Liste erzeugt eigene aggregierte Zeilen im Ergebnis.
Beispieltabelle: sales
Wir verwenden während dieser Lektion eine Tabelle namens sales. Sie enthält Transaktionen nach Region, Produktkategorie und Betrag.
Führen Sie den Code aus, um die Tabelle zu erstellen und mit Daten zu füllen, damit Sie jedem Beispiel folgen können.
CREATE TABLE sales (
region TEXT,
category TEXT,
amount NUMERIC
);
INSERT INTO sales VALUES
('East', 'Electronics', 500),
('East', 'Clothing', 200),
('West', 'Electronics', 300),
('West', 'Clothing', 400),
('North', 'Electronics', 150),
('North', 'Clothing', 250);Der frühere Ansatz: UNION ALL
Bevor GROUPING SETS verfügbar war, mussten Summen auf mehreren Ebenen durch separate Abfragen ermittelt und mit UNION ALL zusammengeführt werden. Das ist repetitiv, schwerer zu lesen und durchsucht die Tabelle mehrfach.
Das folgende Beispiel liefert Summen nach Region UND nach Kategorie – mithilfe von drei separaten SELECT-Anweisungen.
SELECT region, NULL AS category, SUM(amount) AS total
FROM sales
GROUP BY region
UNION ALL
SELECT NULL, category, SUM(amount)
FROM sales
GROUP BY category
UNION ALL
SELECT NULL, NULL, SUM(amount)
FROM sales;GROUPING-SETS-Syntax
Die GROUPING SETS-Klausel wird innerhalb eines regulären GROUP BY (oder an dessen Stelle) platziert. Sie geben jede gewünschte Gruppierung als eingeklammerte Spaltenliste an. Ein leerer Satz () bedeutet die Gesamtsumme – also keinerlei Gruppierung.
Diese einzelne Abfrage erledigt genau das, was das dreiteilige UNION ALL oben erledigt hat, aber kompakter und mit nur einem Tabellendurchlauf.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
(region),
(category),
()
);Das Ergebnis lesen
Jede Zeile in der Ausgabe gehört genau zu einem Gruppierungssatz. Wenn eine Spalte nicht Teil des aktiven Gruppierungssatzes ist, lautet ihr Wert NULL.
- Eine Zeile mit
region = 'East'undcategory = NULLgehört zum Satz(region). - Eine Zeile mit
region = NULLundcategory = 'Electronics'gehört zum Satz(category). - Eine Zeile, in der beide Werte NULL sind, ist die Gesamtsumme aus dem Satz
().
Diese NULL-Werte sind strukturell bedingt – sie bedeuten „alle Werte“ für diese Dimension und nicht, dass Daten fehlen.
Gruppierungssätze mit mehreren Spalten
Jeder Gruppierungssatz kann mehr als eine Spalte enthalten. Der Satz (region, category) gruppiert nach beiden Spalten zusammen, genau wie ein einfaches GROUP BY region, category.
Die Kombination mit einzelnen Sätzen und der Gesamtsumme ergibt eine Zusammenfassung auf vier Ebenen in einer einzigen Abfrage.
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
(region, category),
(region),
(category),
()
);Die Funktion GROUPING()
Da NULL entweder bedeuten kann, dass diese Spalte nicht gruppiert wurde, oder tatsächlich fehlende Daten darstellen kann, stellt SQL die Funktion GROUPING() bereit, um beides zu unterscheiden.
GROUPING(col) gibt 1 zurück, wenn die Spalte im aktuellen Gruppierungssatz nicht enthalten war (d. h. ihr NULL-Wert strukturell bedingt ist), und 0, wenn die Spalte Teil der Gruppierung ist (oder einen echten NULL-Wert enthält).
SELECT
region,
category,
SUM(amount) AS total,
GROUPING(region) AS is_region_total,
GROUPING(category) AS is_category_total
FROM sales
GROUP BY GROUPING SETS (
(region),
(category),
()
);NULL-Bezeichnungen ersetzen
Ein gängiges Muster besteht darin, strukturell bedingte NULL-Werte durch eine beschreibende Bezeichnung zu ersetzen, damit Berichte leichter zu lesen sind. Verwenden Sie CASE WHEN GROUPING(...) = 1 THEN 'All ...' ELSE col END, um die Bezeichnung nur für Rollup-Zeilen einzusetzen.
SELECT
CASE WHEN GROUPING(region) = 1 THEN 'All Regions' ELSE region END AS region,
CASE WHEN GROUPING(category) = 1 THEN 'All Categories' ELSE category END AS category,
SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
(region),
(category),
()
);GROUPING SETS im Vergleich zu ROLLUP
ROLLUP(a, b) ist eine Kurzform, die auf die Gruppierungssätze (a, b), (a), () erweitert wird – es fügt immer Zwischensummen entlang einer Hierarchie sowie die Gesamtsumme hinzu.
GROUPING SETS gibt Ihnen vollständige Kontrolle: Sie wählen genau, welche Kombinationen erscheinen. Wenn Sie nicht die vollständige Hierarchie benötigen, können Sie Ebenen weglassen. Die beiden folgenden Abfragen erzeugen dieselbe Ausgabe.
-- Using ROLLUP
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),
()
);GROUPING SETS im Vergleich zu CUBE
CUBE(a, b) erzeugt jede mögliche Kombination der aufgeführten Spalten: (a, b), (a), (b), (). Es ist nützlich für dimensionsübergreifende Analysen, erzeugt aber viele Zeilen.
GROUPING SETS ermöglicht es Ihnen, nur die gewünschten Kombinationen auszuwählen, sodass das Ergebnis fokussiert und die Abfrage schnell bleibt.
-- CUBE produces 4 grouping sets for 2 columns
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY CUBE(region, category);
-- GROUPING SETS: omit the (category)-only set if not needed
SELECT region, category, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
(region, category),
(region),
()
);Praktischer Anwendungsfall: Verkaufs-Dashboard
Ein echtes Dashboard benötigt häufig Details auf Zeilenebene, Zwischensummen pro Abteilung und eine Gesamtsumme in einer einzigen Ergebnismenge. GROUPING SETS macht dies ohne Aggregation auf Anwendungsseite oder mehrere Datenbankzugriffe trivial.
Diese Abfrage liefert Detailzeilen pro Region und Kategorie, Zwischensummen nur pro Region sowie eine einzelne Zeile mit der Gesamtsumme – alles so sortiert, dass die Gesamtsumme zuletzt erscheint.
SELECT
COALESCE(region, 'TOTAL') AS region,
COALESCE(category, 'ALL') AS category,
SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS (
(region, category),
(region),
()
)
ORDER BY
GROUPING(region),
region NULLS LAST,
GROUPING(category),
category NULLS LAST;Kurzer Test
Testen Sie Ihr Verständnis von GROUPING SETS.
Zusammenfassung der Lektion
Das haben Sie über GROUPING SETS gelernt:
- Mit GROUPING SETS können Sie mehrere Gruppierungskombinationen in einer einzigen Abfrage definieren und dadurch sich wiederholende UNION-ALL-Muster ersetzen.
- Jeder Satz wird als eingeklammerte Spaltenliste innerhalb von
GROUP BY GROUPING SETS (...)angegeben. Ein leerer Satz()erzeugt die Gesamtsumme. - Spalten, die nicht im aktiven Satz enthalten sind, erscheinen in dieser Zeile als NULL – verwenden Sie
GROUPING(col), um diese strukturell bedingten NULL-Werte zu erkennen. - ROLLUP und CUBE sind praktische Kurzformen für häufige Muster, aber GROUPING SETS gibt Ihnen vollständige und präzise Kontrolle darüber, welche Gruppierungen enthalten sind.
- Kombinieren Sie dies mit COALESCE oder CASE WHEN GROUPING(...), um NULL-Werte in Berichten durch verständliche Bezeichnungen zu ersetzen.
Häufig gestellte Fragen
Ist die Lektion „GROUPING SETS erklärt“ kostenlos?
Ja — der vollständige Text von „GROUPING SETS erklärt“ 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 „GROUPING SETS erklärt“?
Genau die gewünschten Gruppierungen auswählen 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 4 von 4.
Wie lange dauert die Lektion „GROUPING SETS erklärt“?
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