SQL Academy · Lektion

Grundlæggende SELECT DISTINCT

Returnér kun entydige rækker.

Lektion 1 af 413 trin

Grundlæggende SELECT DISTINCT er en gratis SQL Academy-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 SQL Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvorfor dubletter opstår

Tabeller indeholder ofte gentagne værdier. En customers-tabel kan f.eks. angive den samme city i tusindvis af rækker. Når du kun er interesseret i mængden af forskellige værdier, returnerer almindelig SELECT alle rækker, inklusive gentagelser.

SELECT DISTINCT samler identiske rækker til én. I denne lektion lærer du det grundlæggende i kun at returnere unikke resultater.

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

Nøgleordet DISTINCT

DISTINCT står lige efter SELECT. Det fjerner dubletter fra resultatsættet, så der kun bevares én kopi af hver unik kombination af de valgte kolonner.

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

DISTINCT gælder for hele rækken

En almindelig misforståelse er, at DISTINCT kun gælder for én kolonne. Det gælder faktisk for den hele valgte række. Hver kolonne, du angiver, indgår i afgørelsen af, om to rækker er dubletter.

Nedenfor fjernes dubletter ud fra værdien i city alene, fordi det er den eneste valgte kolonne.

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

Eksempeldata

Forestil dig en lille orders-tabel. Bemærk de gentagne værdier i status og country. Vi bruger denne struktur gennem hele 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)
);

En enkelt DISTINCT-kolonne

Hvis du vælger DISTINCT status fra eksempeldataene, returneres de unikke statusværdier: paid og shipped. De fire rækker reduceres til to.

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

NULL behandles som én værdi

Selvom NULL normalt ikke er lig med noget (heller ikke sig selv), behandler DISTINCT alle NULL-værdier som én gruppe. Hvis en kolonne har mange rækker med NULL, får du præcis én NULL i det unikke resultat.

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

DISTINCT med ORDER BY

Du vil som regel have de unikke værdier sorteret. DISTINCT køres først for at oprette mængden af unikke værdier, og derefter sorterer ORDER BY den. Enhver kolonne i ORDER BY skal også være med på SELECT-listen, når du bruger DISTINCT.

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

DISTINCT kontra GROUP BY

SELECT DISTINCT col og SELECT col GROUP BY col giver de samme unikke rækker. Brug DISTINCT, når du bare vil have unikke værdier, og vælg GROUP BY, når du også har brug for aggregater som COUNT pr. gruppe.

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

SELECT country FROM orders
GROUP BY country;

DISTINCT har en omkostning

Det er ikke gratis at fjerne dubletter. Databasen skal sortere eller hashe alle kandidatrækkerne for at finde de unikke. På store tabeller medfører det ekstra arbejde for CPU og hukommelse, så bed kun om DISTINCT, når du faktisk har brug for unikke resultater.

-- 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 udtryk

Du kan anvende DISTINCT på et beregnet udtryk, ikke kun på en rå kolonne. Databasen evaluerer udtrykket for hver række og fjerner derefter dubletter fra resultaterne.

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

Oprettelse af en opslagliste

En praktisk anvendelse af DISTINCT er at udfylde en rulleliste eller filterliste i en applikation: Hent de unikke statusser, så brugeren kan se alle mulige valgmuligheder, der findes i dataene.

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

Hurtig kontrol

Hvor skal nøgleordet DISTINCT stå, og hvad fjerner det dubletter fra?

Opsummering

Du har lært det grundlæggende i SELECT DISTINCT:

  • Det fjerner dubletter fra resultatsættet.
  • Det gælder for den hele valgte række, ikke kun én kolonne.
  • Alle NULL-værdier samles til én værdi.
  • ORDER BY køres efter fjernelsen af dubletter, og kolonnerne skal være valgte.
  • Det kræver ekstra arbejde, så brug det kun, når det er nødvendigt.

Næste emne: brug af DISTINCT på tværs af flere kolonner.

SELECT DISTINCT status
FROM orders
ORDER BY status;
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
46
Lektioner
183

Ofte stillede spørgsmål

Er lektionen “Grundlæggende SELECT DISTINCT” gratis?

Ja — hele teksten til “Grundlæggende SELECT 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 SQL Academy-kurset, skal du opgradere til CoddyKit PRO. SQL Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Grundlæggende SELECT DISTINCT”?

Returnér kun entydige rækker. Du øver dig i SQL Academy 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å SQL Academy?

Der kræves ingen tidligere erfaring. SQL Academy 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 “Grundlæggende SELECT 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 SQL Academy-lektion?

Ja. Alle SQL Academy-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. Grundlæggende SELECT DISTINCT
  2. DISTINCT på flere kolonner
  3. PostgreSQL DISTINCT ON
  4. Optælling af entydige værdier
← Tilbage til SQL Academy