ROLLUP ist eine Erweiterung von GROUP BY, die Zwischensummen von der feinsten bis zur gröbsten Ebene automatisch ergänzt. Damit eignet sich die Klausel ideal für Berichte mit gestuften Summen — etwa Umsätze je Monat, je Quartal und als Jahressumme.

Das Grundprinzip

Man schreibt ROLLUP hinter GROUP BY und listet die Spalten in der gewünschten Hierarchie:

SELECT jahr, quartal, SUM(umsatz) AS summe
FROM verkauf
GROUP BY ROLLUP (jahr, quartal);

Die Datenbank liefert alle Ebenen in einem Ergebnis: je Jahr und Quartal, je Jahr sowie die Gesamtsumme. Bei n Spalten entstehen n + 1 Gruppierungsebenen — die Reihenfolge der Spalten bestimmt die Hierarchie. Die Gesamtsumme wird als letzte Zeile mit NULL in allen Gruppenspalten ausgegeben.

GROUPING() zur Unterscheidung von NULL

Die Zwischensummen-Zeilen enthalten NULL in den nicht gruppierten Spalten. Die Funktion GROUPING(quartal) = 1 zeigt an, dass dieser NULL-Wert von der Zusammenfassung stammt und nicht aus den Quelldaten. So lassen sich echte Daten-NULL von Super-Aggregat-NULL sauber trennen, zum Beispiel mit einem CASE-Ausdruck für die Beschriftung „Zwischensumme“.

Verfügbarkeit

ROLLUP ist SQL-Standard und wird von PostgreSQL (ab 9.5), SQL Server, Oracle, BigQuery, Snowflake und Redshift unterstützt. MySQL und MariaDB bieten die Variante GROUP BY ... WITH ROLLUP. GROUPING SETS kann dieselben Ebenen explizit auflisten; CUBE geht über die Hierarchie hinaus und erzeugt alle Kombinationen.

Praxis-Beispiel

Ein Jahresbericht möchte Umsätze je Kategorie und Monat, je Kategorie sowie eine Gesamtsumme. Mit GROUP BY ROLLUP (kategorie, monat) erhält man alle drei Ebenen in einem Durchlauf und kann sie direkt in einer Tabelle oder einem OLAP-Bericht darstellen.

Verwandte Grundlagen: SQL GROUP BY, SQL GROUPING SETS, SQL CUBE, SQL HAVING.