Gruppere etter flere kolonner og uttrykk
Sammensatte grupperingsnøkler og gruppering etter beregnede verdier.
Gruppere etter flere kolonner og uttrykk er en gratis leksjon i Forberedelse til SQL-intervju 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 Forberedelse til SQL-intervju, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Utover én enkelt grupperingsnøkkel
Virkelige rapporter grupperer sjelden etter én kolonne. Intervjuere går gjerne fra «salg per region» til «salg per region per måned» for å se om De forstår komplekse grupperingsnøkler.
Regelen skalerer enkelt: Når De lister flere kolonner i GROUP BY, får De én rad per unik kombinasjon av disse kolonnene.
Hva flere kolonner betyr
Når De skriver GROUP BY region, product, er gruppenøkkelen paret (region, product). Hvert unike par blir én rad i resultatet.
- 5 regioner og 4 produkter gir opptil 20 grupper.
- Kombinasjoner som aldri forekommer, gir ingen rad.
- Kolonnenes rekkefølge i GROUP BY endrer ikke resultatsettet, men kan noen ganger endre spørringsplanen.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY region, product;SELECT-regelen gjelder fortsatt
Den grunnleggende begrensningen blir ikke mindre streng. Hver ikke-aggregerte SELECT-kolonne må finnes i GROUP BY. Med sammensatte nøkler lister De ganske enkelt opp alle sammen.
Å glemme én kolonne i en gruppe med flere nøkler er den vanligste feilen under press i et jobbintervju. Sørg for at GROUP BY-listen samsvarer nøyaktig med de ikke-aggregerte SELECT-kolonnene.
-- 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 etter et uttrykk
De kan gruppere etter en beregnet verdi, ikke bare etter en råkolonne. Et vanlig behov er å gruppere salg per måned, noe som innebærer å gruppere etter en avkortet eller uttrukket dato.
Uttrykket i GROUP BY må samsvare med uttrykket i SELECT. Databasemotoren grupperer etter det beregnede resultatet.
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-bøtter
Et kraftig mønster er å gruppere etter et CASE-uttrykk for å opprette egendefinerte bøtter. Slik kan De lage sammendrag av «små / mellomstore / store bestillinger» uten en oppslagstabell.
Intervjuere liker dette fordi det tester både CASE-logikk og gruppering etter en avledet verdi samtidig.
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 etter kolonneposisjon
Mange dialekter lar Dem gruppere etter ordinalposisjon: GROUP BY 1, 2 betyr den første og andre SELECT-kolonnen. Det er kortfattet, men skjørt.
Intervjuere godtar det kanskje, men legg merke til risikoen: Hvis SELECT-listen omorganiseres, endres grupperingen uten at det er åpenbart. Foretrekk eksplisitte uttrykk i produksjonskode.
-- 1 = month expression, 2 = region
SELECT DATE_TRUNC('month', order_date) AS month,
region, SUM(amount)
FROM sales
GROUP BY 1, 2;NULL-verdier danner sin egen gruppe
Her er en fallgruve ved håndtering av NULL i grupperinger: Når en grupperingskolonne inneholder NULL-verdier, slås alle NULL-rader sammen til én enkelt gruppe.
Dette skiller seg fra likhetssammenligninger, der NULL aldri er lik NULL. Ved gruppering behandles NULL-verdier som «like» og danner én bøtte. Intervjuere elsker denne tilsynelatende motsigelsen.
-- Rows with region IS NULL all land in one group
SELECT region, COUNT(*) AS orders
FROM sales
GROUP BY region;GROUPING SETS for flere nivåer
Bruk GROUPING SETS for å produsere flere grupperingsnivåer i én spørring. Den beregner hvert angitte sett med nøkler og slår resultatene sammen.
Dette signaliserer kompetanse på mellomnivå eller seniornivå: I stedet for tre separate spørringer og en UNION returnerer én setning totalsummer per region, per produkt og for hele datasettet 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 vanlige grupperingssett. ROLLUP(region, product) gir region + produkt, delsummer per region og en totalsum, noe som passer godt for hierarkiske rapporter.
CUBE genererer alle kombinasjoner av de angitte kolonnene. Kunnskap om disse skiller kandidater som har laget virkelige rapporteringsspørringer, fra andre.
SELECT region, product, SUM(amount) AS total
FROM sales
GROUP BY ROLLUP (region, product);Gjennomgått eksempel: Månedlig regionsrapport
La oss kombinere ideene: Finn totalt og gjennomsnittlig salg per region per måned, bare for fullførte bestillinger, og sorter resultatet slik at det blir lett å lese.
WHERE begrenser radene først, den sammensatte nøkkelen grupperer etter region og månedsuttrykk, og ORDER BY ordner resultatet. Dette er et typisk komplett svar i et jobbintervju for analytikere.
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;Slik resonerer De høyt
For alle spørsmål om sammensatt gruppering bør De angi nøkkelen uttrykkelig: «Jeg grupperer etter kombinasjonen av X og Y, så jeg får én rad per unik (X, Y)-kombinasjon.»
Bekreft deretter at hver ikke-aggregerte SELECT-kolonne finnes i denne nøkkelen, og nevn at NULL-verdier slås sammen til én gruppe. Denne metodiske forklaringen belønnes i intervjuer på mellomnivå.
Hurtigsjekk
Resonner rundt sammensatte grupperingsnøkler.
Oppsummering
Sammensatte nøkler: Når flere kolonner listes opp, produseres én rad per unik kombinasjon; hver ikke-aggregerte SELECT-kolonne må finnes i nøkkelen.
- De kan gruppere etter uttrykk, CASE-bøtter eller ordinalposisjoner (posisjoner er skjørt).
- NULL-verdier i en grupperingskolonne slås sammen til én enkelt gruppe.
GROUPING SETS,ROLLUPogCUBEproduserer flere grupperingsnivåer i én spørring.- Flytt radfiltre til WHERE før grupperingen.
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
- 30
- Leksjoner
- 120
Ofte stilte spørsmål
Er leksjonen «Gruppere etter flere kolonner og uttrykk» gratis?
Ja – hele teksten i «Gruppere etter flere kolonner og uttrykk» 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 Forberedelse til SQL-intervju-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til SQL-intervju inneholder totalt 4 leksjoner.
Hva lærer jeg i «Gruppere etter flere kolonner og uttrykk»?
Sammensatte grupperingsnøkler og gruppering etter beregnede verdier. Du øver på Forberedelse til SQL-intervju 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 Forberedelse til SQL-intervju?
Ingen tidligere erfaring er nødvendig. Forberedelse til SQL-intervju 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 «Gruppere etter flere kolonner og uttrykk»?
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 Forberedelse til SQL-intervju-leksjonen?
Ja. Alle Forberedelse til SQL-intervju-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
- GROUP BY-regelen for SELECT-kolonner
- HAVING versus WHERE
- Gruppere etter flere kolonner og uttrykk
- Telle og filtrere grupper