Telle og filtrere grupper
Finn grupper som oppfyller en terskel – det klassiske spørsmålet om kunder med mer enn N bestillinger.
Telle og filtrere grupper er en gratis leksjon i Forberedelse til kodeintervjuer på CoddyKit. Dette er leksjon 4 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 kodeintervjuer, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Det vanligste grupperingsspørsmålet
«Finn kunder med mer enn N bestillinger» er den klassiske GROUP BY-oppgaven i jobbintervjuer. Variasjoner dukker stadig opp: produkter som er solgt mer enn X ganger, avdelinger med minst Y ansatte eller dager med over Z innlogginger.
Alle følger det samme mønsteret: grupper, tell, og filtrer deretter gruppene med HAVING.
Trinn én: Tell per gruppe
Start med å telle rader i hver gruppe. Gruppér etter nøkkelen som definerer en «kunde» eller et «produkt», og bruk deretter COUNT(*).
Dette gir én rad per gruppe med gruppens størrelse. De har ikke filtrert ennå; De måler bare hver gruppe.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;Trinn to: Filtrer med HAVING
Behold nå bare gruppene som oppfyller terskelen. Betingelsen gjelder et aggregat, så den må stå i HAVING, ikke WHERE.
Les det slik: «Gruppér bestillingene etter kunde, og behold deretter kunder med mer enn fem bestillinger.» Dette er det komplette svaret på den klassiske oppgaven.
SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Tell unike kontra tell alle
Følg nøye med på formuleringen. «Kunder som har bestilt mer enn 3 forskjellige produkter» krever COUNT(DISTINCT product_id), ikke COUNT(*).
COUNT(*)teller rader i gruppen.COUNT(DISTINCT col)teller unike, ikke-NULL-verdier.
Intervjuere legger inn «forskjellige» eller «unike» i oppgaven for å teste om De bruker DISTINCT.
SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;Filtrering på SUM i stedet for COUNT
Den samme strukturen fungerer for summer. «Kunder som totalt har brukt mer enn 1000» grupperer etter kunde og filtrerer på SUM(amount).
Ethvert aggregat kan styre HAVING-betingelsen: COUNT, SUM, AVG, MAX eller MIN. Når De identifiserer målet i oppgaven, vet De hvilket aggregat De skal filtrere på.
SELECT customer_id, SUM(amount) AS total_spent
FROM orders
GROUP BY customer_id
HAVING SUM(amount) > 1000;Flere gruppebetingelser
HAVING kan kombinere betingelser med AND/OR, også når de gjelder forskjellige aggregater. «Kunder med over 5 bestillinger OG en gjennomsnittlig bestilling over 100» uttrykkes i én HAVING-klausul.
Hver betingelse refererer til sitt eget aggregat, og alle evalueres etter grupperingen. Dette viser at De kan uttrykke sammensatte forretningsregler på en ryddig måte.
SELECT customer_id,
COUNT(*) AS orders,
AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;Kombiner WHERE og HAVING
Ofte må De filtrere rader før De teller. «Blant bestillinger fra i år: kunder med mer enn 5 bestillinger» bruker WHERE for datoen og HAVING for antallet.
WHERE reduserer radene først, og deretter brukes gruppering og HAVING-terskelen. Å få begge klausulene riktige i én spørring er et tegn på kompetanse på mellomnivå.
SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;Finne duplikater
En nært beslektet oppgave er «finn dupliserte e-postadresser». Gruppér etter kolonnen som skal være unik, og behold grupper med mer enn én forekomst.
Dette enkle mønsteret finner dupliserte nøkler, gjentatte transaksjoner eller alle verdier som forekommer oftere enn de skal. Intervjuere spør om dette for å teste om De ser gruppering som et verktøy for deduplisering.
SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;Grupper med et nøyaktig antall
Terskler er ikke alltid «større enn». «Kunder med nøyaktig én ordre» bruker HAVING COUNT(*) = 1; «minst 3» bruker >= 3.
Hør etter grenseordet i oppgaven: «flere enn», «minst», «nøyaktig», «færre enn». Hvert av dem tilsvarer en annen sammenligningsoperator, og intervjuere tester om du er presis.
-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;Returner bare nøklene
Noen ganger ber oppgaven bare om de kvalifiserende identifikatorene, ikke antallene, ofte for å bruke dem i en annen spørring. Du grupperer og filtrerer fortsatt, men henter bare nøkkelen i SELECT.
Du kan deretter pakke dette inn i en IN-underspørring eller en join for å hente komplette poster for disse kundene. Å kunne sette sammen spørringer på denne måten er et tydelig seniortrekk.
SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;Intervjuguide
For alle spørsmål om «grupper som oppfyller en terskel» bør du gå gjennom fire trinn høyt: (1) identifiser grupperingsnøkkelen, (2) velg aggregatmålet, (3) avgjør sammenligningsoperatoren ut fra formuleringen, (4) plasser radfiltre i WHERE og aggregatfilteret i HAVING.
Dette mønsteret løser hele klassen av problemer med telling og filtrering.
Hurtigsjekk
Velg riktig spørring for oppgaven.
Oppsummering
Mønster: grupper etter nøkkelen, aggreger, og filtrer grupper med HAVING. Dette løser «flere enn N ordrer», kunder som bruker mest, duplikater og engangskunder.
- Bruk
COUNT(*)for rader ogCOUNT(DISTINCT col)for unike verdier. - Tilpass sammenligningsoperatoren til formuleringen i oppgaven.
- Radfiltre plasseres i WHERE, og aggregatfiltre i HAVING.
- Hent bare nøkkelen i SELECT for å bruke den i en IN-underspørring eller join.
Lær deg Forberedelse til kodeintervjuer 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
- 90
- Leksjoner
- 360
Ofte stilte spørsmål
Er leksjonen «Telle og filtrere grupper» gratis?
Ja – hele teksten i «Telle og filtrere grupper» 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 kodeintervjuer-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Forberedelse til kodeintervjuer inneholder totalt 4 leksjoner.
Hva lærer jeg i «Telle og filtrere grupper»?
Finn grupper som oppfyller en terskel – det klassiske spørsmålet om kunder med mer enn N bestillinger. Du øver på Forberedelse til kodeintervjuer 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 kodeintervjuer?
Ingen tidligere erfaring er nødvendig. Forberedelse til kodeintervjuer 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 4 av 4.
Hvor lang tid tar leksjonen «Telle og filtrere grupper»?
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 kodeintervjuer-leksjonen?
Ja. Alle Forberedelse til kodeintervjuer-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