CUBE für alle Kombinationen
Jede Gruppierungskombination auf einmal
CUBE für alle Kombinationen ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 3 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 CUBE?
Die CUBE-Erweiterung in SQL erzeugt jede mögliche Gruppierungskombination aus einer Liste von Spalten. Während ROLLUP eine Hierarchie erstellt, erzeugt CUBE das vollständige Kreuzprodukt der Zwischensummen – einschließlich der Gesamtsumme.
Stellen Sie sich vor, Sie würden sagen: „Geben Sie mir jede Zwischensumme, die sich aus diesen Spalten berechnen lässt.“
Die Tabelle einrichten
Wir verwenden eine Tabelle sales, die den Umsatz nach year, region und Produktkategorie erfasst. Diese Art mehrdimensionaler Daten ist das ideale Einsatzgebiet für CUBE.
CREATE TABLE sales (
year INT,
region VARCHAR(20),
category VARCHAR(20),
revenue NUMERIC(10,2)
);
INSERT INTO sales VALUES
(2023, 'North', 'Electronics', 12000),
(2023, 'North', 'Clothing', 8000),
(2023, 'South', 'Electronics', 9500),
(2023, 'South', 'Clothing', 6000),
(2024, 'North', 'Electronics', 14000),
(2024, 'North', 'Clothing', 9500),
(2024, 'South', 'Electronics', 11000),
(2024, 'South', 'Clothing', 7200);Ihre erste CUBE-Abfrage
Die Syntax ist unkompliziert: Ersetzen Sie GROUP BY durch GROUP BY CUBE(...) und listen Sie die Spalten innerhalb der Klammern auf. SQL erzeugt alle Kombinationen dieser Spalten als Gruppierungssätze.
SELECT
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;Wie viele Gruppierungen erzeugt CUBE?
Für n Spalten erzeugt CUBE 2n Gruppierungssätze – einen für jede Teilmenge der Spaltenliste, einschließlich der leeren Menge (der Gesamtsumme).
Bei drei Spalten (year, region, category) sind das 2³ = 8 Gruppierungssätze: jede einzelne Spalte, jedes Spaltenpaar, alle drei Spalten zusammen und keine Spalte.
-- 3 columns => 8 grouping sets:
-- (year, region, category)
-- (year, region)
-- (year, category)
-- (region, category)
-- (year)
-- (region)
-- (category)
-- () <- grand total
SELECT COUNT(*) AS row_count
FROM (
SELECT year, region, category, SUM(revenue)
FROM sales
GROUP BY CUBE(year, region, category)
) sub;NULL-Werte kennzeichnen die aufgerollte Dimension
Genau wie ROLLUP verwendet CUBE NULL, um anzuzeigen, dass über eine Spalte aggregiert wurde. Wenn region in einer Ergebniszeile NULL ist, fasst diese Zeile für die entsprechende Kombination der übrigen Spalten alle Regionen zusammen.
Verwenden Sie GROUPING(col), um einen echten NULL-Wert von einer Aggregationsmarkierung zu unterscheiden.
SELECT
GROUPING(year) AS g_year,
GROUPING(region) AS g_region,
GROUPING(category) AS g_category,
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY g_year, g_region, g_category;NULL-Werte mit COALESCE verständlich machen
Damit die Ausgabe in Berichten besser lesbar ist, umschließen Sie jede gruppierte Spalte mit COALESCE und ersetzen das Aggregations-NULL durch eine beschreibende Bezeichnung wie 'ALL'.
SELECT
COALESCE(CAST(year AS VARCHAR), 'ALL YEARS') AS year,
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;CUBE vs. ROLLUP – der entscheidende Unterschied
ROLLUP(a, b, c) erzeugt nur Zwischensummen entlang einer Hierarchie: (a,b,c), (a,b), (a), (). Dabei wird die Reihenfolge von links nach rechts berücksichtigt.
CUBE(a, b, c) erzeugt jede Teilmenge – einschließlich Querschnitten wie (a,c) oder nur (b) –, die ROLLUP vollständig überspringt. Verwenden Sie CUBE, wenn Sie eine vollständige mehrdimensionale Analyse ohne vorgegebene Hierarchie benötigen.
-- ROLLUP: 4 grouping sets
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY ROLLUP(year, region);
-- CUBE: 4 grouping sets for 2 columns (same count here)
-- but adds the (region) subtotal that ROLLUP omits
SELECT year, region, SUM(revenue)
FROM sales
GROUP BY CUBE(year, region);Partielles CUBE
Sie können reguläre GROUP BY-Spalten mit einer CUBE-Teilliste kombinieren. Spalten außerhalb von CUBE(...) sind in jedem Gruppierungssatz enthalten, während nur die Spalten innerhalb von CUBE vollständig miteinander kombiniert werden.
-- year is fixed; CUBE only over region and category
SELECT
year,
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY year, CUBE(region, category)
ORDER BY year, region, category;CUBE-Ergebnisse mit HAVING filtern
HAVING funktioniert mit der Ausgabe von CUBE genau wie mit einem regulären GROUP BY. Sie können Gruppierungszeilen herausfiltern, deren Aggregatwert einen Schwellenwert nicht erfüllt – beispielsweise indem Sie nur Zeilen beibehalten, deren Gesamtumsatz einen Mindestwert überschreitet.
SELECT
COALESCE(region, 'ALL REGIONS') AS region,
COALESCE(category, 'ALL CATEGORIES') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(region, category)
HAVING SUM(revenue) > 15000
ORDER BY total_revenue DESC;CUBE mit Fensterfunktionen kombinieren
Sie können eine CUBE-Abfrage in eine CTE einschließen und anschließend Fensterfunktionen anwenden, um Zeilen im Ergebnis zu bewerten oder zu vergleichen. Dies ist ein leistungsfähiges Muster für Dashboards auf Führungsebene.
WITH cube_result AS (
SELECT
COALESCE(region, 'ALL') AS region,
COALESCE(category, 'ALL') AS category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(region, category)
)
SELECT
region,
category,
total_revenue,
RANK() OVER (ORDER BY total_revenue DESC) AS revenue_rank
FROM cube_result
ORDER BY revenue_rank;Wann Sie CUBE wählen sollten
CUBE ist das richtige Werkzeug, wenn:
- Sie alle Kombinationen von Zwischensummen für einen Ad-hoc- oder OLAP-Bericht benötigen.
- Zwischen Ihren Gruppierungsspalten keine natürliche Hierarchie besteht.
- Sie Analystinnen und Analysten die Daten beliebig aufschlüsseln lassen möchten.
Vermeiden Sie CUBE bei einer großen Anzahl von Spalten – bereits 4 Spalten erzeugen 16 Gruppierungssätze, 5 Spalten 32. Bevorzugen Sie ROLLUP oder explizite GROUPING SETS, damit die Ergebnismengen überschaubar bleiben.
Kurzer Test
Wie viele unterschiedliche Gruppierungssätze erzeugt GROUP BY CUBE(a, b, c, d)?
Zusammenfassung der Lektion
In dieser Lektion haben Sie gelernt, wie CUBE aus einer Spaltenliste jede mögliche Kombination von Gruppierungssätzen erzeugt, wodurch es sich ideal für mehrdimensionale Berichte eignet.
Wichtigste Erkenntnisse:
GROUP BY CUBE(a, b, c)erzeugt 2n Gruppierungssätze.NULLin einer Ergebnisspalte bedeutet, dass über diese Dimension aggregiert wurde; verwenden SieGROUPING(), um dies zu erkennen.COALESCEwandelt bei der Aggregation entstehendeNULL-Werte in aussagekräftige Bezeichnungen um.- Ein partieller
CUBE(z. B.GROUP BY year, CUBE(region, category)) fixiert einige Spalten und bildet nur für die übrigen einen CUBE. - Verwenden Sie
CUBEfür vollständige Ad-hoc-Analysen; bevorzugen SieROLLUPoder expliziteGROUPING SETS, wenn die Hierarchie bekannt oder die Spaltenanzahl groß ist.
Häufig gestellte Fragen
Ist die Lektion „CUBE für alle Kombinationen“ kostenlos?
Ja — der vollständige Text von „CUBE für alle Kombinationen“ 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 „CUBE für alle Kombinationen“?
Jede Gruppierungskombination auf einmal 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 3 von 4.
Wie lange dauert die Lektion „CUBE für alle Kombinationen“?
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