SQL Academy · Lektion

Grunderna i SELECT DISTINCT

Returnera endast unika rader.

Lektion 1 av 413 steg

Grunderna i SELECT DISTINCT är en gratis lektion i SQL Academy på CoddyKit. Detta är lektion 1 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 SQL Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i SQL Academy innehåller totalt 4 lektioner.

Varför dubbletter uppstår

Tabeller innehåller ofta upprepade värden. En customers-tabell kan innehålla samma city i tusentals rader. När du bara bryr dig om mängden unika värden returnerar en vanlig SELECT varje rad, inklusive upprepningar.

SELECT DISTINCT slår ihop identiska rader till en. I den här lektionen lär du dig grunderna i att bara returnera unika resultat.

SELECT city FROM customers;
-- Returns one row per customer, with many repeated cities

Nyckelordet DISTINCT

DISTINCT placeras direkt efter SELECT. Det tar bort dubblettrader från resultatmängden och behåller bara en kopia av varje unik kombination av de valda kolumnerna.

SELECT DISTINCT city
FROM customers;
-- One row per unique city

DISTINCT gäller hela raden

En vanlig missuppfattning är att DISTINCT gäller en enda kolumn. I själva verket gäller det den hela valda raden. Varje kolumn du listar deltar i avgörandet av om två rader är dubbletter.

Nedanstående rader dedupliceras enbart utifrån värdet i city, eftersom det är den enda valda kolumnen.

SELECT DISTINCT country
FROM customers;
-- Unique countries across all customers

Exempeldata

Föreställ dig en liten orders-tabell. Lägg märke till de upprepade värdena i status och country. Vi använder denna struktur genom hela lektionen.

  • id=1, status='paid', country='US'
  • id=2, status='paid', country='US'
  • id=3, status='shipped', country='DE'
  • id=4, status='paid', country='DE'
CREATE TABLE orders (
  id         int PRIMARY KEY,
  status     text,
  country    text,
  amount     numeric(10,2)
);

DISTINCT för en kolumn

Om du väljer DISTINCT status från exempeldata får du de unika statusvärdena: paid och shipped. De fyra raderna blir två.

SELECT DISTINCT status
FROM orders;
-- paid
-- shipped

NULL behandlas som ett värde

Även om NULL normalt inte är lika med någonting (inte ens sig självt), behandlar DISTINCT alla NULL-värden som en enda grupp. Om en kolumn har många rader med NULL får du exakt ett NULL i det unika resultatet.

SELECT DISTINCT shipped_at
FROM orders;
-- All NULL shipped_at rows collapse into a single NULL row

DISTINCT med ORDER BY

Vanligtvis vill du ha de unika värdena sorterade. DISTINCT körs först för att skapa den unika mängden, och sedan sorterar ORDER BY den. Alla kolumner i ORDER BY måste också finnas i listan över valda kolumner när du använder DISTINCT.

SELECT DISTINCT country
FROM orders
ORDER BY country;
-- DE
-- US

DISTINCT jämfört med GROUP BY

SELECT DISTINCT col och SELECT col GROUP BY col ger samma unika rader. Använd DISTINCT när du bara vill ha unika värden, och välj GROUP BY när du också behöver aggregat som COUNT per grupp.

-- These two return the same set of countries:
SELECT DISTINCT country FROM orders;

SELECT country FROM orders
GROUP BY country;

DISTINCT kostar resurser

Det är inte kostnadsfritt att ta bort dubbletter. Databasen måste sortera eller hasha alla kandidatrader för att hitta de unika. I stora tabeller ökar detta belastningen på processor och minne, så använd bara DISTINCT när du faktiskt behöver unika resultat.

-- Avoid blind DISTINCT on every query.
-- If the column is already unique (e.g. a PRIMARY KEY),
-- DISTINCT does nothing useful but still costs work:
SELECT DISTINCT id FROM orders;  -- id is already unique

DISTINCT i uttryck

Du kan använda DISTINCT på ett beräknat uttryck, inte bara på en rå kolumn. Databasen beräknar uttrycket för varje rad och tar sedan bort dubbletter bland resultaten.

SELECT DISTINCT upper(country) AS country_code
FROM orders
ORDER BY country_code;
-- DE
-- US

Skapa en uppslagslista

Ett praktiskt användningsområde för DISTINCT är att fylla en rullgardinsmeny eller filterlista i en applikation: hämta de unika statusvärdena så att användaren kan se alla möjliga alternativ som för närvarande finns i data.

SELECT DISTINCT status
FROM orders
ORDER BY status;
-- paid
-- shipped

Snabbtest

Var placeras nyckelordet DISTINCT, och vad tar det bort dubbletter från?

Sammanfattning

Du har lärt dig grunderna i SELECT DISTINCT:

  • Det tar bort dubblettrader från resultatmängden.
  • Det gäller den hela valda raden, inte en enda kolumn.
  • Alla NULL-värden slås ihop till ett enda värde.
  • ORDER BY körs efter att dubbletterna tagits bort; dess kolumner måste vara valda.
  • Det kräver extra arbete, så använd det bara när det behövs.

Nästa steg: att utöka DISTINCT till flera kolumner.

SELECT DISTINCT status
FROM orders
ORDER BY status;
Gratis att börja

Lär dig SQL 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
46
Lektioner
183

Vanliga frågor

Är lektionen ”Grunderna i SELECT DISTINCT” gratis?

Ja – hela texten till ”Grunderna i SELECT DISTINCT” 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 SQL Academy, kan Ni uppgradera till CoddyKit PRO. Kursen i SQL Academy innehåller totalt 4 lektioner.

Vad lär jag mig i ”Grunderna i SELECT DISTINCT”?

Returnera endast unika rader. Ni övar på SQL Academy 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 SQL Academy?

Du behöver inga förkunskaper. Utbildningen i SQL Academy 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 1 av 4.

Hur lång tid tar lektionen ”Grunderna i SELECT DISTINCT”?

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 SQL Academy-lektionen?

Ja. Varje SQL Academy-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. Grunderna i SELECT DISTINCT
  2. DISTINCT på flera kolumner
  3. PostgreSQL DISTINCT ON
  4. Räkna unika värden
← Tillbaka till SQL Academy