CodeGym /Kurse /SQL SELF /Einzigartige Werte mit DISTINCT herausziehen

Einzigartige Werte mit DISTINCT herausziehen

SQL SELF
Level 6 , Lektion 1
Verfügbar

Manchmal erinnern Datenbanken an jemanden mit schlechtem Gedächtnis – sie schreiben alles auf, vergessen aber, was sie schon gespeichert haben. Am Ende öffnest du eine Tabelle mit Städten von Kunden und findest zehnmal "Berlin", fünfmal "Seattle" und jede Menge andere Dopplungen. Das passiert, wenn ein und dieselbe Stadt bei verschiedenen Kunden auftaucht. Aber du willst ja keine Werbekampagne für zehn "Berlins" machen, wenn es eigentlich nur eine Stadt ist, oder?

Um nur die einzigartigen Werte rauszufiltern – also ohne Dubletten – gibt’s den praktischen Befehl DISTINCT. Das ist wie ein magischer Wischmopp: Einmal drüber und alle doppelten Zeilen sind weg, übrig bleibt nur das, was sich wirklich unterscheidet.

DISTINCT erlaubt es dir, nur einzigartige Zeilen aus dem Ergebnis eines Queries zu holen. Das ist super praktisch, wenn du doppelte Daten loswerden willst, zum Beispiel:

  • Einzigartige Produkte in Bestellungen.
  • Einzigartige Kundennamen.
  • Einzigartige Datenkombis, zum Beispiel "Stadt + Land".

Wie funktioniert DISTINCT?

Der Syntax von DISTINCT ist easy und verständlich, wie das bei SQL meistens so ist:

SELECT DISTINCT spalte1, spalte2, ...
FROM tabelle;

Wenn du DISTINCT zu deinem Query hinzufügst, sorgt die Datenbank dafür, dass jede Zeile im Ergebnis einzigartig ist.

Beispiele für die Nutzung von DISTINCT

Starten wir mit klassischen Beispielen, damit du checkst, wie DISTINCT funktioniert.

Beispiel 1: Einzigartige Werte einer Spalte

Angenommen, wir haben eine Tabelle students mit Infos über Studierende:

-- Tabelle students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Wir wollen wissen, aus welchen Städten die Studierenden kommen. Wir schreiben das Query

SELECT city
FROM students;

und bekommen das Ergebnis:

city
Seattle
Toronto
Seattle
Chicago
Seattle

Das ist nicht ganz das, was wir wollten :(

Um die Dubletten loszuwerden, musst du DISTINCT benutzen:

SELECT DISTINCT city
FROM students;

Ergebnis:

city
Seattle
Toronto
Chicago

Ohne DISTINCT würden wir "Seattle" dreimal sehen, aber wir wollten es nur einmal haben.

Beispiel 2: Einzigartige Werte mehrerer Spalten

Jetzt stell dir vor, wir wollen einzigartige Kombinationen von "Vorname + Nachname" bekommen, weil es unter den Studierenden Namensvetter geben kann.

Wir nehmen wieder die gleiche Tabelle students:

-- Tabelle students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students;

Ergebnis:

first_name last_name
Maria Chi
Alex Lin
Anna Song
Nat Cole

So funktioniert DISTINCT wie ein Filter: Es beachtet alle angegebenen Spalten und entfernt nur die Zeilen, wo alle diese Spalten gleich sind.

Beispiel 3: Einzigartige Kombinationen und Sortierung

Jetzt kombinieren wir DISTINCT mit ORDER BY, um einzigartige Werte alphabetisch nach Nachnamen zu sortieren.

Wir nehmen wieder die Tabelle students:

-- Tabelle students

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Toronto
3 Anna Song Seattle
4 Nat Cole Chicago
5 Maria Chi Seattle

Query:

SELECT DISTINCT first_name, last_name
FROM students
ORDER BY last_name ASC;

Ergebnis:

first_name last_name
Maria Chi
Nat Cole
Alex Lin
Anna Song

Doppelte Zeilen sind weg, und die Nachnamen sind alphabetisch sortiert.

Beispiel 4: Nutzung bei Aggregationen

Was passiert, wenn wir DISTINCT mit einer Funktion wie COUNT kombinieren?

SELECT COUNT(DISTINCT city) AS unique_city_count
FROM students;

Ergebnis:

unique_city_count
3

Dieses Query gibt dir die Anzahl der einzigartigen Städte zurück. Ziemlich praktisch, oder?

Besonderheiten bei DISTINCT

Wenn du DISTINCT benutzt, solltest du wissen, dass es auf alle angegebenen Spalten wirkt. Wenn du mehr Spalten ins Query packst, kann sich das Ergebnis ändern.

Beispiel 5: Warum ist Kontext so wichtig?

Wenn du zusätzliche Felder ins Query aufnimmst, kann das die Einzigartigkeit der Zeilen beeinflussen.

SELECT DISTINCT first_name, city
FROM students;

Tabelle students:

id first_name last_name city
1 Maria Chi Seattle
2 Alex Lin Austin
3 Anna Song Seattle
4 Otto Art Denver
5 Maria Chi Portland

Ergebnis:

first_name city
Maria Seattle
Alex Austin
Anna Seattle
Otto Denver
Maria Portland

Jede Kombination "Vorname + Stadt" ist jetzt einzigartig. Also denk dran: Die Einzigartigkeit wird durch alle angegebenen Spalten bestimmt, nicht durch jede Spalte einzeln.

Typische Fehler bei DISTINCT

Einer der häufigsten Fehler bei DISTINCT ist, dass man nicht richtig versteht, was das Query eigentlich macht. Wenn du zum Beispiel zu viele Spalten angibst, bekommst du vielleicht ein Ergebnis, das ganz anders ist als erwartet, weil die Einzigartigkeit auf allen Spalten basiert.

Zum Beispiel:

SELECT DISTINCT *
FROM students;

In diesem Fall wird jede Zeile als einzigartig betrachtet, weil alle Spalten berücksichtigt werden.

Ein weiterer Fehler ist, DISTINCT zu benutzen, wo es gar nicht nötig ist. Wenn du sicher bist, dass die Daten schon einzigartig sind (zum Beispiel eine Spalte, die ein Primary Key ist), dann macht DISTINCT nur unnötige Last auf die DB.

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION