Förberedelse inför kodningsintervjuer · Lektion

DISTINCT kontra GROUP BY för unikhet

När DISTINCT är rätt svar och när en intervjuare i stället förväntar sig GROUP BY

Lektion 3 av 413 steg

DISTINCT kontra GROUP BY för unikhet är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad DISTINCT gör

DISTINCT tar bort duplicerade rader. Det viktiga som intervjuare kontrollerar är att det gäller hela den valda raden, inte en enda kolumn – SELECT DISTINCT a, b tar alltså bort dubbletter utifrån paret (a, b).

SELECT DISTINCT department
FROM employees;

DISTINCT omfattar alla valda kolumner

Med flera kolumner behåller DISTINCT varje unik kombination – en rad per unikt (department, job_title)-par. Det finns inget standardsätt att ta bort dubbletter från endast en kolumn.

SELECT DISTINCT department, job_title
FROM employees;

Vad GROUP BY gör

GROUP BY slår ihop rader som har samma nyckel till en rad per grupp. Att gruppera efter en kolumn ger i sig samma resultat som DISTINCT på den kolumnen.

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

Den verkliga skillnaden: aggregering

När skiljer de sig åt? När ett aggregat behövs. GROUP BY kan beräkna COUNT, SUM eller AVG per grupp; DISTINCT kan inte det. Behövs unika rader? DISTINCT. Behövs ett mått per grupp? GROUP BY.

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

DISTINCT kan inte räkna per grupp

Det går inte att lägga till räkning ovanpå DISTINCT. För frågan ”hur många anställda finns per avdelning?” är rätt verktyg alltid GROUP BY med COUNT(*) – inte 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) kombinerar båda idéerna

En användbar kombination: COUNT(DISTINCT col) räknar unika värden inom varje grupp. Här ligger DISTINCT inuti aggregatet och besvarar frågan ”hur många unika titlar finns per avdelning?”

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

Räkna unika värden totalt

Utan GROUP BY räknar COUNT(DISTINCT col) unika värden i hela tabellen – ett tydligt svar på frågan ”hur många olika avdelningar 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;

Prestandan är ofta likvärdig

Är DISTINCT eller GROUP BY snabbast? Vid vanlig borttagning av dubbletter är de oftast likvärdiga – optimerare planerar dem på liknande sätt. Välj utifrån avsikten: DISTINCT för unika rader, GROUP BY vid aggregering.

DISTINCT och NULL

Hur behandlar DISTINCT NULL? Alla NULL-värden räknas som lika, så många NULL-rader slås ihop till en. GROUP BY gör likadant – NULL-värden bildar en enda grupp.

-- 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 icke-standardiserade konstruktionen DISTINCT ON (expr), som behåller den första raden per nyckel enligt en ORDER BY. Portabel kod använder i stället 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äller för hela SELECT, inte en kolumn

En sista fallgrop: DISTINCT gäller för hela raden, så SELECT DISTINCT customer_id, order_date ger inte en rad per kund. Använd GROUP BY med MAX eller en fönsterfunktion för 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;

Snabb kontroll

Välj rätt verktyg.

Sammanfattning

Sammanfattning: DISTINCT tar bort dubbletter från hela rader; GROUP BY slår ihop rader efter nyckel och möjliggör aggregat. COUNT(DISTINCT col) räknar unika värden, båda behandlar NULL som ett enda värde och prestandan är oftast likvärdig.

Gratis att börja

Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis

Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.

Kurser
90
Lektioner
360

Vanliga frågor

Är lektionen ”DISTINCT kontra GROUP BY för unikhet” gratis?

Ja – hela texten till ”DISTINCT kontra GROUP BY för unikhet” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.

Vad lär jag mig i ”DISTINCT kontra GROUP BY för unikhet”?

När DISTINCT är rätt svar och när en intervjuare i stället förväntar sig GROUP BY Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.

Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?

Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.

Hur lång tid tar lektionen ”DISTINCT kontra GROUP BY för unikhet”?

De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.

Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?

Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.

Alla lektioner i den här kursen

  1. Projicera kolumner och fallgropar med alias
  2. Beräknade kolumner och uttryckens prioritet
  3. DISTINCT kontra GROUP BY för unikhet
  4. CASE-uttryck i SELECT
← Tillbaka till Förberedelse inför kodningsintervjuer