COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)
Det klassiske spørgsmål om, hvordan hver COUNT-form behandler NULL'er og dubletter
COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT) er en gratis Forberedelse til SQL-interview-lektion på CoddyKit. Dette er lektion 1 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.
Spørgsmålet, du vil blive stillet
Hvis du er til en SQL-jobsamtale, kan du forvente dette inden for de første ti minutter: Hvad er forskellen på COUNT(*), COUNT(column) og COUNT(DISTINCT column)?
Det ser trivielt ud, men interviewere bruger det til at kontrollere, om du virkelig forstår, hvordan aggregatfunktioner behandler NULL-værdier og dubletter. Et sikkert og præcist svar viser, at du har skrevet rigtige forespørgsler og ikke bare lært syntaksen udenad.
I denne lektion opbygger vi en helt sikker forståelse, så du kan svare med det samme og forklare hvorfor.
COUNT(*) tæller rækker
COUNT(*) tæller rækker. Den ser slet ikke på værdierne i nogen kolonne, så NULL-værdier er irrelevante. Hvis tabellen har 100 rækker, returnerer COUNT(*) 100, punktum.
Stjernen betyder ikke, at kolonner multipliceres eller udvides her. Det er et særligt token, der betyder "tæl hver række, der opfylder betingelserne". Det er den form, du bruger, når spørgsmålet ganske enkelt er "hvor mange poster?"
SELECT COUNT(*) AS total_rows
FROM employees;Eksempeldata at arbejde med
Lad os tage udgangspunkt i én lille tabel. Forestil dig en tabel med navnet employees og en department-kolonne, der kan indeholde NULL:
- Alice, Salg
- Bob, Salg
- Carol, NULL
- Dan, Teknik
- Eve, NULL
Det er 5 rækker i alt. Tre rækker har en afdelingsværdi (Salg, Salg, Teknik), og to rækker har NULL. Husk disse tal; vi tæller denne tabel på tre forskellige måder.
COUNT(column) ignorerer NULL
COUNT(column) tæller kun de rækker, hvor kolonnen ikke er NULL. Den ignorerer NULL-værdier fuldstændigt.
På vores eksempeldata returnerer COUNT(department) 3, ikke 5, fordi to afdelingsværdier er NULL. Dette er den vigtigste enkeltstående pointe i hele lektionen: COUNT af en kolonne tæller aldrig NULL-værdier.
SELECT COUNT(department) AS depts_present
FROM employees;
-- returns 3 on our sample dataSammenligning indtil videre
Side om side i den samme tabel med 5 rækker:
COUNT(*)= 5 (alle rækker)COUNT(department)= 3 (afdelinger, der ikke er NULL)
Forskellen mellem dem, 5 minus 3, er lig med antallet af NULL-afdelinger. Et smart trick til en jobsamtale: COUNT(*) - COUNT(col) giver dig antallet af NULL-værdier i kolonnen uden at skrive en separat WHERE-betingelse.
SELECT COUNT(*) - COUNT(department) AS null_departments
FROM employees;
-- returns 2COUNT(DISTINCT column)
COUNT(DISTINCT column) tæller antallet af unikke værdier, der ikke er NULL. Først fjernes dubletter, derefter ignoreres NULL-værdier, og til sidst tælles det, der er tilbage.
I vores data er de forskellige afdelingsværdier Salg og Teknik, så COUNT(DISTINCT department) returnerer 2. De to NULL-værdier tæller ikke med, og den gentagne Salg-værdi reduceres til én.
SELECT COUNT(DISTINCT department) AS unique_depts
FROM employees;
-- returns 2Alle tre samlet
Det fulde billede i vores tabel med 5 rækker:
COUNT(*)= 5 — rækkerCOUNT(department)= 3 — værdier, der ikke er NULLCOUNT(DISTINCT department)= 2 — unikke værdier, der ikke er NULL
Hvis du kan gengive denne rækkefølge, først med hensyn til NULL-værdier og derefter til dubletter, har du forstået hele konceptet. Bemærk, at hver form returnerer en værdi, der er mindre end eller lig med den ovenfor.
SELECT
COUNT(*) AS rows_total,
COUNT(department) AS depts_present,
COUNT(DISTINCT department) AS unique_depts
FROM employees;Et gennemgået intervieweksempel
Interviewere formulerer ofte spørgsmålet sådan: "Hvor mange medarbejdere er tilknyttet en afdeling, og hvor mange forskellige afdelinger findes der?"
Den første del er COUNT(department) (tilknyttet betyder ikke NULL). Den anden del er COUNT(DISTINCT department). At genkende, hvilken COUNT hver formulering svarer til, er netop den færdighed, der testes.
SELECT
COUNT(department) AS assigned_employees,
COUNT(DISTINCT department) AS distinct_departments
FROM employees;COUNT med en betingelse
Et populært opfølgende spørgsmål er: tæl kun rækker, der opfylder en betingelse. Et enkelt, portabelt trick er at bruge COUNT over et CASE-udtryk. Fordi COUNT(column) springer NULL-værdier over, skal du få CASE til at returnere NULL for de rækker, du vil udelukke.
Her tæller vi medarbejdere i Salg. CASE giver kun en værdi for rækker med Salg og ellers NULL, så COUNT tæller kun disse rækker.
SELECT
COUNT(CASE WHEN department = 'Sales' THEN 1 END) AS sales_count
FROM employees;
-- returns 2Almindelige fejl, du skal undgå
Vær opmærksom på disse fælder, som interviewere lægger ud:
- At antage, at
COUNT(column)er lig medCOUNT(*)— det gælder kun, når kolonnen ikke indeholder nogen NULL-værdier. - At tro, at
COUNT(DISTINCT col)medtager NULL som én unik værdi — det gør den ikke. - At skrive
COUNT(1)i forventning om, at den springer NULL-værdier over — den fungerer somCOUNT(*)og tæller alle rækker.
Nævn dette selv under en jobsamtale for at vise, at du forstår emnet i dybden.
COUNT(1) og COUNT(constant)
Kandidater spørger ofte, hvad der er hurtigst, COUNT(*) eller COUNT(1). Svaret er, at de er semantisk identiske — begge tæller hver række uanset NULL-værdier — og moderne optimeringsprogrammer behandler dem ens, så der er ingen reel forskel i ydeevnen.
Konstanten i COUNT(1) er aldrig NULL, så ingen rækker springes over. Foretræk COUNT(*) for tydelighedens skyld; det er den idiomatiske form.
SELECT COUNT(*) AS a, COUNT(1) AS b
FROM employees;
-- a and b are always equalHurtigt tjek
Afprøv din mentale model på eksempeldataene.
Opsummering
Nu har du styr på det mest stillede spørgsmål om aggregatfunktioner:
COUNT(*)tæller hver række, inklusive NULL-værdier.COUNT(column)tæller kun værdier, der ikke er NULL.COUNT(DISTINCT column)tæller unikke værdier, der ikke er NULL.COUNT(*) - COUNT(col)giver antallet af NULL-værdier uden ekstra arbejde.COUNT(1)er lig medCOUNT(*)— ingen udeladelse af NULL-værdier og ingen forskel i hastighed.
Sig det klart, og underbyg det med en forklaring. Næste emne er, hvordan SUM og AVG behandler NULL-værdier.
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 “COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)” gratis?
Ja — hele teksten til “COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)” 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 “COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)”?
Det klassiske spørgsmål om, hvordan hver COUNT-form behandler NULL'er og dubletter 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 1 af 4.
Hvor lang tid tager lektionen “COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)”?
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
- COUNT(*) kontra COUNT(kolonne) kontra COUNT(DISTINCT)
- SUM og AVG med NULL'er
- MIN, MAX og ikke-numerisk aggregering
- Aggregater uden GROUP BY