DISTINCT op meerdere kolommen
Uniekheid over combinaties van kolommen.
DISTINCT op meerdere kolommen is een gratis SQL Academy-les op CoddyKit. Dit is les 2 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject SQL Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus SQL Academy bevat in totaal 4 lessen.
Waarom meerdere kolommen?
Je weet al dat SELECT DISTINCT dubbele rijen verwijdert. Maar wat betekent "dubbel" wanneer je query meerdere kolommen teruggeeft?
Een rij wordt alleen als dubbel beschouwd wanneer elke geselecteerde kolom dezelfde waarde heeft als een andere rij. Als zelfs één kolom verschilt, blijven beide rijen behouden.
Voorbeeldtabel: Orders
Laten we een kleine tabel orders maken om mee te experimenteren. De tabel slaat op welke klant iets uit welke categorie en in welk land heeft gekocht.
CREATE TABLE orders (
id INTEGER,
customer VARCHAR(50),
category VARCHAR(50),
country VARCHAR(50)
);
INSERT INTO orders VALUES
(1, 'Alice', 'Electronics', 'US'),
(2, 'Alice', 'Books', 'US'),
(3, 'Bob', 'Electronics', 'UK'),
(4, 'Alice', 'Electronics', 'US'),
(5, 'Bob', 'Electronics', 'UK'),
(6, 'Carol', 'Clothing', 'CA');DISTINCT op één kolom
Een korte herinnering: DISTINCT op één kolom gebruiken geeft alleen elke unieke waarde voor die kolom terug.
Hier krijgen we elke unieke klantnaam — slechts drie rijen, hoewel er zes bestellingen zijn.
SELECT DISTINCT customer
FROM orders;DISTINCT op twee kolommen
Voeg nu een tweede kolom toe. Het trefwoord DISTINCT staat nog steeds maar één keer, direct na SELECT. De database behandelt elk uniek paar (customer, category) als één rij.
Alice komt twee keer voor — één keer voor elektronica en één keer voor boeken — omdat dit twee verschillende combinaties zijn.
SELECT DISTINCT customer, category
FROM orders;Hoe uniciteit wordt gecontroleerd
De database vergelijkt volledige momentopnamen van rijen. Om een rij met DISTINCT te verwijderen, moeten alle kolommen in de SELECT-lijst exact overeenkomen met een rij die al is gezien.
In onze tabel orders zijn rij 3 en rij 5 allebei (Bob, elektronica, UK) — een perfecte overeenkomst op alle drie de kolommen — dus wordt een van de twee verwijderd.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Een gedeeltelijke overeenkomst wordt niet verwijderd
Alice heeft twee rijen met category = elektronica, maar in beide staat country = US. Omdat alle drie de kolommen zijn geselecteerd, zijn die twee oorspronkelijke rijen identiek en blijft er maar één over.
Wijzig je selectie, dan verandert ook de controle op uniciteit.
-- Select only customer + country
-- (Alice, US) appears twice in the table but DISTINCT keeps it once
SELECT DISTINCT customer, country
FROM orders;
-- Now add category back — uniqueness recalculated
SELECT DISTINCT customer, category, country
FROM orders;Praktijkvoorbeeld: Unieke paren
Een veelgebruikt patroon is het vinden van elke unieke combinatie van twee kenmerken — bijvoorbeeld welke productcategorieën in welke landen worden verkocht, ongeacht hoe vaak er een verkoop heeft plaatsgevonden.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;DISTINCT combineren met WHERE
Je kunt rijen eerst filteren met WHERE; daarna verwijdert DISTINCT dubbele rijen uit het gefilterde resultaat. De twee clausules werken onafhankelijk: WHERE beperkt de gegevens en DISTINCT verwijdert duplicaten.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT versus GROUP BY
Een gelijkwaardige manier om unieke combinaties te krijgen is GROUP BY. Beide aanpakken leveren hetzelfde resultaat op bij eenvoudige verwijdering van duplicaten. Het verschil wordt belangrijk wanneer je aggregaties wilt: met GROUP BY kun je COUNT(*), SUM() enzovoort toevoegen, met DISTINCT niet.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Unieke combinaties tellen
Als je een DISTINCT over meerdere kolommen in een subquery plaatst, kun je tellen hoeveel unieke combinaties er bestaan. Dit is een handige manier om de diversiteit in je gegevens te meten.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Veelgemaakte fout: DISTINCT geldt voor alle kolommen
Een veelvoorkomende misvatting is dat DISTINCT alleen geldt voor de eerste vermelde kolom. Dat is niet zo. DISTINCT houdt altijd rekening met de volledige rij die door alle geselecteerde kolommen wordt gevormd.
Je kunt DISTINCT niet alleen op sommige kolommen toepassen terwijl je duplicaten in andere kolommen behoudt — daarvoor heb je vensterfuncties nodig, zoals ROW_NUMBER().
-- This does NOT give distinct customers with any category
-- It gives distinct (customer, category) pairs
SELECT DISTINCT customer, category
FROM orders;
-- If you want one row per customer (any category), use:
SELECT customer, MIN(category) AS sample_category
FROM orders
GROUP BY customer;Korte toets
Toets je begrip van DISTINCT op meerdere kolommen.
Samenvatting van de les
Goed gedaan! Dit heb je geleerd over het gebruik van DISTINCT op meerdere kolommen:
- DISTINCT geldt voor de volledige rij — alle geselecteerde kolommen worden samen gecontroleerd.
- Een rij wordt alleen verwijderd wanneer elke kolom exact overeenkomt met een eerder geziene rij.
- Als je kolommen toevoegt aan of verwijdert uit de SELECT-lijst, verandert welke rijen als duplicaten worden beschouwd.
- Je kunt DISTINCT vrij combineren met WHERE en ORDER BY.
- GROUP BY is een gelijkwaardig alternatief en vereist wanneer je ook aggregaties nodig hebt.
Als je DISTINCT op meerdere kolommen beheerst, kun je unieke combinaties in elke gegevensset efficiënt onderzoeken.
Leer SQL met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 46
- Lessen
- 183
Veelgestelde vragen
Is de les “DISTINCT op meerdere kolommen” gratis?
Ja — de volledige tekst van “DISTINCT op meerdere kolommen” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus SQL Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus SQL Academy bevat in totaal 4 lessen.
Wat leer ik in “DISTINCT op meerdere kolommen”?
Uniekheid over combinaties van kolommen. Je oefent met SQL Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met SQL Academy te beginnen?
Ervaring vooraf is niet nodig. SQL Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 2 van 4.
Hoe lang duurt de les “DISTINCT op meerdere kolommen”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over SQL Academy?
Ja. Elke les over SQL Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- De basis van SELECT DISTINCT
- DISTINCT op meerdere kolommen
- PostgreSQL DISTINCT ON
- Unieke waarden tellen