CUBE for alle kombinasjoner
Alle grupperingskombinasjoner samtidig.
CUBE for alle kombinasjoner er en gratis leksjon i SQL Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i SQL Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva er CUBE?
Utvidelsen CUBE i SQL genererer alle mulige kombinasjoner av grupperinger fra en liste med kolonner. Mens ROLLUP oppretter et hierarki, produserer CUBE et fullstendig kryssprodukt av delsummer — inkludert totalsummen.
Tenk på det som å svare på: "Gi meg alle delsummer som kan beregnes ut fra disse kolonnene."
Klargjøring av tabellen
Vi bruker en sales-tabell som sporer inntekter etter år, region og produktkategori. Denne typen flerdimensjonale data er et område der CUBE virkelig kommer til sin rett.
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);Deres første CUBE-spørring
Syntaksen er enkel: Bytt ut GROUP BY med GROUP BY CUBE(...), og oppgi kolonnene inni parentesene. SQL genererer alle kombinasjoner av disse kolonnene som grupperingssett.
SELECT
year,
region,
category,
SUM(revenue) AS total_revenue
FROM sales
GROUP BY CUBE(year, region, category)
ORDER BY year, region, category;Hvor mange grupperinger produserer CUBE?
For n kolonner produserer CUBE 2n grupperingssett — ett for hvert delsett av kolonnelisten, inkludert det tomme settet (totalsummen).
Med tre kolonner (year, region, category) blir det 2³ = 8 grupperingssett: hver kolonne alene, hvert par, alle tre samlet og ingen kolonner.
-- 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 markerer den opprullede dimensjonen
Akkurat som ROLLUP bruker CUBE NULL for å signalisere at en kolonne er aggregert over. Hvis region er NULL i en resultatrad, oppsummerer raden alle regioner for den kombinasjonen av de resterende kolonnene.
Bruk GROUPING(col) for å skille en faktisk NULL-verdi fra en aggregeringsmarkør.
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;Gjøre NULL-verdier lesbare med COALESCE
For å gjøre utdataene mer lesbare i rapporter kan De pakke hver grupperte kolonne inn i COALESCE og erstatte aggregeringsverdien NULL med en beskrivende etikett som '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 kontra ROLLUP – viktigste forskjell
ROLLUP(a, b, c) oppretter bare delsummer langs ett hierarki: (a,b,c), (a,b), (a), (). Den følger rekkefølgen fra venstre mot høyre.
CUBE(a, b, c) oppretter hvert eneste delsett — inkludert krysskombinasjoner som (a,c) eller bare (b) — som ROLLUP helt utelater. Bruk CUBE når De trenger full flerdimensjonal analyse uten et forhåndsbestemt hierarki.
-- 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);Delvis CUBE
De kan kombinere vanlige GROUP BY-kolonner med en deliste for CUBE. Kolonner som står utenfor CUBE(...), er alltid med i hvert grupperingssett, mens bare kolonnene inni får behandling med alle kombinasjoner.
-- 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;Filtrering med HAVING på CUBE-resultater
HAVING fungerer på CUBE-resultater akkurat som med vanlig GROUP BY. De kan filtrere bort grupperingsrader der aggregatverdien ikke oppfyller en terskel – for eksempel beholde bare rader der de totale inntektene overstiger et minimum.
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;Kombinere CUBE med vindusfunksjoner
De kan pakke inn en CUBE-spørring i en CTE og deretter bruke vindusfunksjoner til å rangere eller sammenligne rader i resultatet. Dette er et kraftig mønster for å bygge dashbord for ledelsen.
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;Når De bør velge CUBE
CUBE er riktig verktøy når:
- De trenger alle kombinasjoner av delsummer for en ad hoc- eller OLAP-lignende rapport.
- Det ikke finnes noe naturlig hierarki mellom grupperingskolonnene.
- De vil la analytikere dele opp dataene på den måten de ønsker.
Unngå CUBE når antallet kolonner er stort – fire kolonner gir allerede 16 grupperingssett, og fem gir 32. Foretrekk ROLLUP eller eksplisitte GROUPING SETS for å holde resultatsettene håndterlige.
Hurtigsjekk
Hvor mange forskjellige grupperingssett produserer GROUP BY CUBE(a, b, c, d)?
Oppsummering av leksjonen
I denne leksjonen lærte De hvordan CUBE genererer alle mulige kombinasjoner av grupperingssett fra en kolonneliste, noe som gjør det ideelt for flerdimensjonal rapportering.
Viktige punkter:
GROUP BY CUBE(a, b, c)produserer 2n grupperingssett.NULLi en resultatkolonne betyr at det er aggregert over denne dimensjonen; brukGROUPING()for å oppdage dette.COALESCEgjør NULL-verdier fra aggregering om til meningsfulle etiketter.- En delvis
CUBE(for eksempelGROUP BY year, CUBE(region, category)) låser noen kolonner og bruker CUBE bare på resten. - Bruk
CUBEtil full ad hoc-analyse; foretrekkROLLUPeller eksplisitteGROUPING SETSnår hierarkiet er kjent eller antallet kolonner er stort.
Lær deg SQL med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 46
- Leksjoner
- 183
Ofte stilte spørsmål
Er leksjonen «CUBE for alle kombinasjoner» gratis?
Ja – hele teksten i «CUBE for alle kombinasjoner» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av SQL Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i SQL Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «CUBE for alle kombinasjoner»?
Alle grupperingskombinasjoner samtidig. Du øver på SQL Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med SQL Academy?
Ingen tidligere erfaring er nødvendig. SQL Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.
Hvor lang tid tar leksjonen «CUBE for alle kombinasjoner»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne SQL Academy-leksjonen?
Ja. Alle SQL Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Utover én enkelt GROUP BY
- ROLLUP for delsummer
- CUBE for alle kombinasjoner
- GROUPING SETS forklart