CUBE ist eine Erweiterung von GROUP BY, die nicht nur hierarchische, sondern alle Kombinationen der angegebenen Spalten als Gruppen erzeugt. Bei n Spalten entstehen 2 hoch n Gruppierungsebenen — das ist der komplette „Würfel“ der möglichen Zusammenfassungen.
Das Grundprinzip
SELECT jahr, kategorie, SUM(umsatz) AS summe
FROM verkauf
GROUP BY CUBE (jahr, kategorie);
Bei zwei Spalten liefert die Abfrage vier Ebenen: je Jahr und Kategorie, je Jahr, je Kategorie sowie die Gesamtsumme. ROLLUP würde nur die Hierarchie Jahr → Gesamt erzeugen; CUBE ergänzt zusätzlich die Ebene je Kategorie.
CUBE im Vergleich
Die drei Erweiterungen unterscheiden sich in der Auswahl der Ebenen:
- GROUPING SETS: genau die selbst gewählten Ebenen.
- ROLLUP: hierarchische Zwischensummen (n + 1 Ebenen).
- CUBE: alle Kombinationen (2 hoch n Ebenen).
Mit wachsender Spaltenzahl wächst CUBE exponentiell: Schon bei fünf Spalten sind es 32 Gruppierungsebenen. Für große Würfel ist GROUPING SETS oft die gezieltere Wahl, weil nur die wirklich benötigten Ebenen berechnet werden.
GROUPING() und GROUPING_ID()
Wie bei ROLLUP markiert GROUPING(spalte) = 1 die Super-Aggregat-Zeilen. SQL Server bietet zusätzlich GROUPING_ID(), das die Gruppierungsebenen als Bitmaske codiert und so eine einfache Fallunterscheidung erlaubt.
Verfügbarkeit
CUBE ist SQL-Standard und wird von PostgreSQL (ab 9.5), SQL Server, Oracle sowie BigQuery, Snowflake und Redshift nativ unterstützt. MySQL 8.0 kennt CUBE nicht direkt — die Kombinationen lassen sich über UNION ALL mehrerer GROUP BY-Abfragen oder über ein äquivalentes GROUPING SETS nachbilden.
Verwandte Grundlagen: SQL GROUP BY, SQL GROUPING SETS, SQL ROLLUP, OLAP.