De SELECT DISTINCT clausule in SQL

Uw tabel kan dubbele waarden bevatten in een kolom en in bepaalde scenario’s kan het nodig zijn dat u alleen unieke records uit de tabel wilt ophalen.

Om dubbele records te verwijderen uit de gegevens die met het SELECT statement zijn opgehaald, kunt u de DISTINCT clausule gebruiken zoals in de voorbeelden hieronder.

Een demo van eenvoudig SELECT – DISTINCT

In het eerste voorbeeld heb ik de DISTINCT clausule gebruikt met het SELECT statement om alleen unieke namen op te halen uit onze demo tabel, sto_emp_salary_paid. Deze tabel slaat de salarissen van werknemers op samen met hun namen. Dus, de dubbele voorkomen van werknemer namen komt voor in de tabel.

Door de DISTINCT-clausule te gebruiken, krijgen we alleen unieke namen van werknemers:

Query:

SELECT DISTINCT(emp_name) FROM sto_emp_salary_paid;

SQL DISTINCT

(Geldt voor SQL Server en MySQL databases)

WERE-clausule gebruiken met DISTINCT

In dit voorbeeld, gebruikte ik de WHERE-clausule met SELECT/DISTINCT-instructie om alleen die unieke werknemers op te halen van wie het betaalde salaris groter is dan of gelijk is aan 4500. Zie de query en de resultatenset:

Query:

1
2
3

SELECT DISTINCT(emp_name) FROM sto_emp_salary_paid
WHERE emp_sal_paid >= 4500;

SQL DISTINCT WHERE

Het voorbeeld van de COUNT-functie met DISTINCT

U kunt de COUNT SQL-functie ook gebruiken om het aantal records op te halen als met de DISTINCT-clausule. De functie geeft alleen het aantal rijen terug dat na de DISTINCT-clausule is teruggegeven.

Voor de demo gebruik ik de tabel met werknemers, waarin de informatie over de werknemers wordt opgeslagen. In de demo worden drie query’s gebruikt:

  • De eerste query retourneert het volledige record uit de tabel
  • De tweede query verkrijgt het aantal werknemers met behulp van ID (COUNT en DISTINCT)
  • De derde query retourneert de unieke namen van werknemers met behulp van de kolom emp_name.

De drie query’s zijn:

1
2
3
4
5
6
7

SELECT * FROM sto_employees;
SELECT COUNT(DISTINCT id) AS “Totaal werknemers” FROM sto_employees
SELECT COUNT(DISTINCT emp_name) AS “Unieke werknemersnamen” FROM sto_employees

SQL DISTINCT COUNT

De DISTINCT-clausule met GROUP BY-voorbeeld

De volgende query haalt de records op uit dezelfde tabel als in de bovenstaande voorbeelden en groepeert de werknemers die een salaris ontvangen. Daarvoor worden de GROUP BY en DISTINCT clausules als volgt gebruikt:

De query:

1
2
3

SELECT DISTINCT(emp_name),emp_id, SUM(emp_sal_paid) As “Totaal betaald” FROM sto_emp_salary_paid
GROUP BY emp_name,emp_id;

SQL DISTINCT GROUP-BY

De record voor de “Jimmy” wordt twee keer weergegeven omdat deze twee verschillende ID’s heeft.

HAVING-clausule gebruiken met DISTINCT

Net als bij het gebruik van de GROUP BY-clausule met DISTINCT, kunt u ook de HAVING-clausule toevoegen voor het ophalen van records. In de volgende query is in het bovenstaande voorbeeld de HAVING-clausule toegevoegd en worden de records opgehaald waarvan de SUM groter is dan 5000.

De query:

1
2
3
4
5

SELECT DISTINCT(emp_name),emp_id, SUM(emp_sal_paid) As “Totaal betaald” FROM sto_emp_salary_paid
GROUP BY emp_name,emp_id
HAVING SUM(emp_sal_paid) > 5000;

SQL DISTINCT HAVING

De DISTINCT-clausule met ORDER BY voorbeeld

De SQL ORDER BY clausule kan worden gebruikt met de DISTINCT clausule om de resultaten te sorteren nadat dubbele waarden zijn verwijderd. Zie de query en de uitvoer hieronder:

1
2
3

SELECT DISTINCT(emp_name) FROM sto_emp_salary_paid
ORDER BY emp_name;

Het resultaat:

SQL DISTINCT ORDER-BY

Meerdere kolommen gebruiken in de DISTINCT-clausule

U kunt ook twee of meer kolommen opgeven als u de SELECT – DISTINCT-clausule gebruikt. Zo bevat onze voorbeeldtabel dubbele waarden voor werknemers en hun ID’s, dus het zal een goede leerschool zijn om te zien hoe de DISTINCT-clausule de records retourneert als beide kolommen in de enkele query worden gebruikt.

Om het verschil te zien, heb ik eerst een query met DISTINCT (emp_name) geschreven, die wordt gevolgd door het gebruik van beide kolommen:

De query:

1
2
3
4
5
6
7
8
9

SELECT DISTINCT emp_name FROM sto_emp_salary_paid
ORDER BY emp_name;
SELECT DISTINCT emp_name,emp_id FROM sto_emp_salary_paid
ORDER BY emp_name;

De resultaten voor volledige tabel, DISTINCT emp_name en DISTINCT emp_name,emp_id query’s:

SQL DISTINCT multi columns

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *