Grunderna i SELECT DISTINCT
Returnera endast unika rader.
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 citiesNyckelordet 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 cityDISTINCT 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 customersExempeldata
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
-- shippedNULL 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 rowDISTINCT 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
-- USDISTINCT 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 uniqueDISTINCT 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
-- USSkapa 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
-- shippedSnabbtest
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 BYkö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;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
- Grunderna i SELECT DISTINCT
- DISTINCT på flera kolumner
- PostgreSQL DISTINCT ON
- Räkna unika värden