Forberedelse til SQL-interview · Lektion

Optælling og filtrering af grupper

Find grupper, der opfylder en tærskel, såsom det klassiske spørgsmål om kunder med mere end N ordrer

Lektion 4 af 413 trin

Optælling og filtrering af grupper er en gratis Forberedelse til SQL-interview-lektion på CoddyKit. Dette er lektion 4 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.

Det mest almindelige grupperingsspørgsmål

'Find kunder med mere end N ordrer' er den klassiske GROUP BY-opgave ved jobsamtaler. Variationer forekommer hele tiden: produkter, der er solgt mere end X gange, afdelinger med mindst Y medarbejdere eller dage med over Z login.

De følger alle det samme mønster: Gruppér, tæl, og filtrér derefter grupperne med HAVING.

Trin et: Tæl pr. gruppe

Begynd med at tælle rækkerne i hver gruppe. Gruppér efter den nøgle, der definerer en 'kunde' eller et 'produkt', og anvend derefter COUNT(*).

Det giver én række pr. gruppe med gruppens størrelse. Du har endnu ikke filtreret; du måler blot hver gruppe.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id;

Trin to: Filtrér med HAVING

Behold nu kun de grupper, der opfylder grænsen. Betingelsen gælder et aggregat, så den skal stå i HAVING, ikke i WHERE.

Læs det sådan: 'Gruppér ordrerne efter kunde, og behold derefter de kunder, hvis antal overstiger fem.' Det er det komplette svar på den klassiske opgaveformulering.

SELECT customer_id, COUNT(*) AS order_count
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

COUNT DISTINCT kontra COUNT ALL

Vær opmærksom på formuleringen. 'Kunder, der har bestilt mere end 3 forskellige produkter' kræver COUNT(DISTINCT product_id), ikke COUNT(*).

  • COUNT(*) tæller rækker i gruppen.
  • COUNT(DISTINCT col) tæller unikke værdier, der ikke er NULL.

Interviewere indsætter 'forskellige' eller 'unikke' i opgaveformuleringen for at teste, om du vælger DISTINCT.

SELECT customer_id, COUNT(DISTINCT product_id) AS distinct_products
FROM orders
GROUP BY customer_id
HAVING COUNT(DISTINCT product_id) > 3;

Filtrering efter SUM i stedet for COUNT

Den samme struktur håndterer summer. 'Kunder, der samlet har brugt mere end 1000' grupperer efter kunde og filtrerer efter SUM(amount).

Ethvert aggregat kan styre HAVING-betingelsen: COUNT, SUM, AVG, MAX eller MIN. Når du genkender opgaveformuleringens måleværdi, ved du, hvilket aggregat du skal filtrere efter.

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 bruger forskellige aggregater. 'Kunder med over 5 ordrer OG en gennemsnitlig ordre over 100' er én HAVING-klausul.

Hver betingelse refererer til sit eget aggregat; alle evalueres efter grupperingen. Det viser, at du kan udtrykke sammensatte forretningsregler klart.

SELECT customer_id,
       COUNT(*) AS orders,
       AVG(amount) AS avg_order
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5 AND AVG(amount) > 100;

Kombinér WHERE og HAVING

Ofte skal du filtrere rækker, før du tæller dem. 'Blandt ordrer fra i år: kunder med mere end 5 ordrer' bruger WHERE til datoen og HAVING til antallet.

WHERE reducerer først antallet af rækker, hvorefter gruppering og HAVING-grænsen anvendes. At få begge klausuler rigtigt i én forespørgsel er et signal på mellemniveau.

SELECT customer_id, COUNT(*) AS orders_this_year
FROM orders
WHERE order_date >= '2024-01-01'
GROUP BY customer_id
HAVING COUNT(*) > 5;

Find dubletter

En nært beslægtet opgave er: 'Find dublerede mailadresser.' Gruppér efter den kolonne, der burde være unik, og behold grupper med et antal over én.

Dette ene mønster finder dublerede nøgler, gentagne transaktioner eller enhver værdi, der forekommer flere gange, end den burde. Interviewere spørger til det for at teste, om du ser gruppering som et værktøj til at fjerne dubletter.

SELECT email, COUNT(*) AS times_seen
FROM users
GROUP BY email
HAVING COUNT(*) > 1;

Grupper med præcis det angivne antal

Tærskler betyder ikke altid "større end". "Kunder med præcis én ordre" bruger HAVING COUNT(*) = 1, mens "mindst 3" bruger >= 3.

Lyt efter grænseordet i opgaven: "mere end", "mindst", "præcis", "færre end". Hvert ord svarer til en forskellig sammenligningsoperator, og interviewere tester, om du er præcis.

-- One-time customers
SELECT customer_id, COUNT(*) AS orders
FROM orders
GROUP BY customer_id
HAVING COUNT(*) = 1;

Returnér kun nøglerne

Nogle gange ønsker opgaven kun de identifikatorer, der opfylder betingelsen, ikke antallene, ofte for at bruge dem i en anden forespørgsel. Du grupperer og filtrerer stadig, men vælger kun nøglen med SELECT.

Du kan derefter pakke dette ind i en IN-underforespørgsel eller bruge en JOIN til at hente de fulde poster for disse kunder. At kende denne sammensætning er et tegn på seniorerfaring.

SELECT customer_id
FROM orders
GROUP BY customer_id
HAVING COUNT(*) > 5;

Interviewguide

Ved alle spørgsmål om "grupper, der opfylder en tærskel", skal du gennemgå fire trin højt: (1) identificér grupperingsnøglen, (2) vælg aggregeringsmålet, (3) afgør sammenligningsoperatoren ud fra formuleringen, (4) placér rækkefiltre i WHERE og aggregatfilteret i HAVING.

Denne skabelon løser hele familien af problemer med optælling og filtrering.

Hurtig test

Vælg den korrekte forespørgsel til opgaven.

Opsummering

Mønster: Gruppér efter nøglen, udfør en aggregering, og filtrér grupper med HAVING. Det løser spørgsmål om "mere end N ordrer", storforbrugere, dubletter og engangskunder.

  • Brug COUNT(*) til rækker og COUNT(DISTINCT col) til unikke værdier.
  • Tilpas sammenligningsoperatoren til formuleringen i opgaven.
  • Rækkefiltre placeres i WHERE, og aggregatfiltre i HAVING.
  • Vælg kun nøglen med SELECT, når den skal bruges i en IN-underforespørgsel eller JOIN.
Gratis at komme i gang

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 “Optælling og filtrering af grupper” gratis?

Ja — hele teksten til “Optælling og filtrering af grupper” 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 “Optælling og filtrering af grupper”?

Find grupper, der opfylder en tærskel, såsom det klassiske spørgsmål om kunder med mere end N ordrer 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 4 af 4.

Hvor lang tid tager lektionen “Optælling og filtrering af grupper”?

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

  1. GROUP BY-reglen for SELECT-kolonner
  2. HAVING kontra WHERE
  3. Gruppering efter flere kolonner og udtryk
  4. Optælling og filtrering af grupper
← Tilbage til Forberedelse til SQL-interview