Forberedelse til SQL-interview · Lektion

DISTINCT kontra GROUP BY for entydighed

Hvornår DISTINCT er det rigtige svar, og hvornår en interviewer i stedet forventer GROUP BY

Lektion 3 af 413 trin

DISTINCT kontra GROUP BY for entydighed 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.

Hvad DISTINCT gør

DISTINCT fjerner dublerede rækker. Det vigtigste, interviewere tester: Det virker på hele den valgte række, ikke på én kolonne — så SELECT DISTINCT a, b fjerner dubletter blandt parret (a, b).

SELECT DISTINCT department
FROM employees;

DISTINCT omfatter alle valgte kolonner

Med flere kolonner beholder DISTINCT hver unik kombination — én række for hvert forskelligt par af (department, job_title). Der findes ingen standardmetode til kun at fjerne dubletter i én kolonne.

SELECT DISTINCT department, job_title
FROM employees;

Hvad GROUP BY gør

GROUP BY samler rækker med den samme nøgle til én række pr. gruppe. Hvis du kun grupperer efter én kolonne, giver det samme resultat som DISTINCT på den kolonne.

SELECT department
FROM employees
GROUP BY department;
-- equivalent to:
SELECT DISTINCT department
FROM employees;

Den egentlige forskel: aggregering

Hvornår er de så forskellige? Når du har brug for et aggregat. GROUP BY kan beregne COUNT, SUM eller AVG pr. gruppe; DISTINCT kan ikke. Har du brug for unikke rækker? DISTINCT. Har du brug for et mål pr. gruppe? GROUP BY.

SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

DISTINCT kan ikke tælle pr. gruppe

Du kan ikke føje optælling til DISTINCT. Når du skal svare på "hvor mange medarbejdere er der pr. afdeling?", er det rigtige værktøj altid GROUP BY med COUNT(*) — ikke SELECT DISTINCT.

-- WRONG intent: this errors or returns one total row
-- SELECT DISTINCT department, COUNT(*) FROM employees;

-- RIGHT:
SELECT department, COUNT(*) AS headcount
FROM employees
GROUP BY department;

COUNT(DISTINCT) kombinerer begge idéer

En nyttig kombination: COUNT(DISTINCT col) tæller unikke værdier inden for hver gruppe. Her ligger DISTINCT inde i aggregatet og besvarer spørgsmålet "hvor mange forskellige titler er der pr. afdeling?"

SELECT department,
       COUNT(DISTINCT job_title) AS distinct_titles
FROM employees
GROUP BY department;

Optælling af forskellige værdier samlet

Uden GROUP BY tæller COUNT(DISTINCT col) unikke værdier i hele tabellen — et klart svar på spørgsmålet "hvor mange forskellige afdelinger har vi?"

SELECT COUNT(DISTINCT department) AS n_departments
FROM employees;

-- equivalently, count the deduped subquery
SELECT COUNT(*)
FROM (SELECT DISTINCT department FROM employees) d;

Ydeevnen er ofte den samme

Er DISTINCT eller GROUP BY hurtigst? Ved almindelig fjernelse af dubletter er de som regel ækvivalente — optimeringsværktøjer planlægger dem på samme måde. Vælg efter hensigten: DISTINCT til unikke rækker, GROUP BY ved aggregering.

DISTINCT og NULL

Hvordan behandler DISTINCT NULL? Den betragter alle NULL-værdier som ens, så mange rækker med NULL samles til én. GROUP BY gør det samme — NULL-værdierne danner én gruppe.

-- If manager_id has several NULLs, this returns one NULL row
SELECT DISTINCT manager_id
FROM employees;

Postgres DISTINCT ON (bonus)

Bonus: Postgres har den ikke-standardiserede DISTINCT ON (expr), som beholder den første række pr. nøgle ud fra en ORDER BY. Portabel kode bruger i stedet ROW_NUMBER().

-- Postgres only: latest order per customer
SELECT DISTINCT ON (customer_id) customer_id, order_id, order_date
FROM orders
ORDER BY customer_id, order_date DESC;

DISTINCT gælder for hele SELECT, ikke én kolonne

Endnu en faldgrube: DISTINCT virker på hele rækken, så SELECT DISTINCT customer_id, order_date giver ikke én række pr. kunde. Brug GROUP BY med MAX eller en vinduesfunktion til det.

-- Does NOT give one row per customer
SELECT DISTINCT customer_id, order_date FROM orders;

-- One row per customer: latest order date
SELECT customer_id, MAX(order_date) AS last_order
FROM orders
GROUP BY customer_id;

Hurtigt tjek

Vælg det rigtige værktøj.

Opsummering

Opsummering: DISTINCT fjerner dubletter fra hele rækker; GROUP BY samler efter nøgle og muliggør aggregater. COUNT(DISTINCT col) tæller unikke værdier, begge behandler NULL-værdier som én, og ydeevnen er som regel den samme.

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 “DISTINCT kontra GROUP BY for entydighed” gratis?

Ja — hele teksten til “DISTINCT kontra GROUP BY for entydighed” 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 “DISTINCT kontra GROUP BY for entydighed”?

Hvornår DISTINCT er det rigtige svar, og hvornår en interviewer i stedet forventer GROUP BY 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 “DISTINCT kontra GROUP BY for entydighed”?

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. Projektion af kolonner og faldgruber ved aliaser
  2. Beregnede kolonner og operatorpræcedens
  3. DISTINCT kontra GROUP BY for entydighed
  4. CASE-udtryk i SELECT
← Tilbage til Forberedelse til SQL-interview