Gruppering efter flere kolonner og udtryk
Sammensatte grupperingsnøgler og gruppering efter beregnede værdier
Gruppering efter flere kolonner og udtryk er en gratis Forberedelse til SQL-interview-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i Forberedelse til SQL-interview, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Forberedelse til SQL-interview-kurset indeholder 4 lektioner i alt.
Ud over én grupperingsnøgle
Virkelige rapporter grupperer sjældent efter én kolonne. Interviewere går fra 'salg pr. region' til 'salg pr. region pr. måned' for at se, om du forstår sammensatte grupperingsnøgler.
Reglen skalerer enkelt: Når du angiver flere kolonner i GROUP BY, får du én række pr. unik kombination af disse kolonner.
Hvad flere kolonner betyder
Når du skriver GROUP BY region, product, er gruppenøglen parret (region, product). Hvert unikt par bliver til én resultat række.
- 5 regioner og 4 produkter giver højst 20 grupper.
- Kombinationer, der aldrig forekommer, giver slet ingen række.
- Kolonnernes rækkefølge i GROUP BY ændrer ikke resultatsættet, men kan nogle gange ændre planen.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;Følg stadig SELECT-reglen
Den grundlæggende begrænsning ændrer sig ikke. Hver ikke-aggregerede SELECT-kolonne skal stå i GROUP BY. Med sammensatte nøgler angiver du dem blot alle.
At glemme én kolonne i en gruppe med flere nøgler er den mest almindelige fejl under pres ved en jobsamtale. Sørg for, at GROUP BY-listen præcist svarer til de ikke-aggregerede SELECT-kolonner.
-- Both region and product appear in GROUP BY
SELECT region, product,
COUNT(*) AS orders,
AVG(amount) AS avg_amount
FROM sales
GROUP BY region, product;Gruppering efter et udtryk
Du kan gruppere efter en beregnet værdi, ikke kun efter en rå kolonne. Et almindeligt spørgsmål er gruppering af salg pr. måned, hvilket betyder gruppering efter en afkortet eller udtrukket dato.
Udtrykket i GROUP BY skal svare til udtrykket i SELECT. Databasemotoren grupperer efter det beregnede resultat.
SELECT DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS monthly_total
FROM sales
GROUP BY DATE_TRUNC('month', order_date);Gruppering med CASE-spande
Et effektivt mønster er at gruppere efter et CASE-udtryk for at oprette brugerdefinerede spande. Sådan laver du oversigter over 'små / mellemstore / store ordrer' uden en opslagstabel.
Interviewere kan lide dette, fordi det på én gang tester både CASE-logik og gruppering efter en afledt værdi.
SELECT CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END AS bucket,
COUNT(*) AS orders
FROM sales
GROUP BY CASE
WHEN amount < 50 THEN 'small'
WHEN amount < 200 THEN 'medium'
ELSE 'large'
END;Gruppering efter kolonneposition
Mange dialekter lader dig gruppere efter ordinalposition: GROUP BY 1, 2 betyder den første og anden SELECT-kolonne. Det er kortfattet, men skrøbeligt.
Interviewere accepterer det måske, men bemærk risikoen: Hvis du ændrer rækkefølgen på SELECT-listen, ændrer grupperingen sig ubemærket. Foretræk eksplicitte udtryk i produktionskode.
-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
region, SUM(amount)
FROM sales
GROUP BY 1, 2;NULL-værdier danner deres egen gruppe
En faldgrube ved håndtering af NULL under gruppering: Når en grupperingskolonne indeholder NULL-værdier, samles alle NULL-rækker i én gruppe.
Det adskiller sig fra lighedssammenligninger, hvor NULL aldrig er lig med NULL. Ved gruppering behandles NULL-værdier som 'ens', og de danner én spand. Interviewere elsker denne tilsyneladende modsigelse.
-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;GROUPING SETS til flere niveauer
Hvis du vil producere flere grupperingsniveauer i én forespørgsel, skal du bruge GROUPING SETS. Den beregner hvert angivet sæt af nøgler og samler resultaterne.
Det er et signal på mellem- til seniorniveau: I stedet for tre separate forespørgsler plus UNION returnerer én SQL-sætning regionalt og produktbaseret salg samt hovedtotaler samlet.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY GROUPING SETS ((region), (product), ());ROLLUP og CUBE
ROLLUP og CUBE er kortformer for almindelige grupperingssæt. ROLLUP(region, product) giver region+produkt, regionale subtotaler og en hovedtotal, hvilket er ideelt til hierarkiske rapporter.
CUBE genererer alle kombinationer af de angivne kolonner. Kendskab til disse adskiller en kandidat, der har bygget virkelige rapportforespørgsler.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);Gennemgået eksempel: Månedlig regionsrapport
Saml idéerne: Beregn det samlede salg og gennemsnitssalget pr. region pr. måned, kun for gennemførte ordrer, og sortér resultatet, så det er let at læse.
WHERE indsnævrer først rækkerne, den sammensatte nøgle grupperer efter region og månedsudtrykket, og ORDER BY arrangerer resultatet. Det er et typisk komplet svar ved en analytikerjobsamtale.
SELECT region,
DATE_TRUNC('month', order_date) AS month,
SUM(amount) AS total,
AVG(amount) AS avg_order
FROM sales
WHERE status = 'completed'
GROUP BY region, DATE_TRUNC('month', order_date)
ORDER BY region, month;Sådan tænker du højt
Ved alle spørgsmål om sammensat gruppering skal du angive nøglen eksplicit: 'Jeg grupperer efter kombinationen af X og Y, så jeg får én række pr. unik (X, Y)-kombination.'
Bekræft derefter, at hver ikke-aggregerede SELECT-kolonne findes i denne nøgle, og nævn, at NULL-værdier samles i én gruppe. Det er denne systematiske forklaring, som jobsamtaler på mellemniveau belønner.
Hurtigt tjek
Overvej sammensatte grupperingsnøgler.
Opsummering
Sammensatte nøgler: Flere kolonner giver én række pr. unik kombination; hver ikke-aggregerede SELECT-kolonne skal være med i nøglen.
- Du kan gruppere efter udtryk, CASE-spande eller ordinalpositioner (positioner er skrøbelige).
- NULL-værdier i en grupperingskolonne samles i én gruppe.
GROUPING SETS,ROLLUPogCUBEproducerer flere grupperingsniveauer i én forespørgsel.- Skub rækkefiltre ind i WHERE før grupperingen.
Lær SQL med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 30
- Lektioner
- 120
Ofte stillede spørgsmål
Er lektionen “Gruppering efter flere kolonner og udtryk” gratis?
Ja — hele teksten til “Gruppering efter flere kolonner og udtryk” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af Forberedelse til SQL-interview-kurset, skal du opgradere til CoddyKit PRO. Forberedelse til SQL-interview-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Gruppering efter flere kolonner og udtryk”?
Sammensatte grupperingsnøgler og gruppering efter beregnede værdier Du øver dig i Forberedelse til SQL-interview med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Forberedelse til SQL-interview?
Der kræves ingen tidligere erfaring. Forberedelse til SQL-interview på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.
Hvor lang tid tager lektionen “Gruppering efter flere kolonner og udtryk”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Forberedelse til SQL-interview-lektion?
Ja. Alle Forberedelse til SQL-interview-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- GROUP BY-reglen for SELECT-kolonner
- HAVING kontra WHERE
- Gruppering efter flere kolonner og udtryk
- Optælling og filtrering af grupper