DISTINCT für mehrere Spalten
Eindeutigkeit über Spaltenkombinationen hinweg
DISTINCT für mehrere Spalten ist eine kostenlose SQL Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des SQL Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Warum mehrere Spalten?
Sie wissen bereits, dass SELECT DISTINCT doppelte Zeilen entfernt. Aber was bedeutet „doppelt“, wenn Ihre Abfrage mehrere Spalten zurückgibt?
Eine Zeile gilt nur dann als Duplikat, wenn jede ausgewählte Spalte denselben Wert wie in einer anderen Zeile hat. Weicht auch nur eine Spalte ab, bleiben beide Zeilen erhalten.
Beispieltabelle: Orders
Wir erstellen eine kleine Tabelle orders, um damit zu experimentieren. Sie speichert, welcher Kunde in welcher Kategorie und in welchem Land eingekauft hat.
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 auf eine Spalte anwenden
Zur Erinnerung: Wenn Sie DISTINCT auf eine einzelne Spalte anwenden, wird jeder eindeutige Wert nur für diese Spalte zurückgegeben.
Hier erhalten wir jeden eindeutigen Kundennamen – nur drei Zeilen, obwohl es sechs Bestellungen gibt.
SELECT DISTINCT customer
FROM orders;DISTINCT auf zwei Spalten anwenden
Fügen Sie nun eine zweite Spalte hinzu. Das Schlüsselwort DISTINCT erscheint weiterhin nur einmal, direkt nach SELECT. Die Datenbank behandelt jedes eindeutige Paar aus (customer, category) als eine Zeile.
Alice erscheint zweimal – einmal für Electronics und einmal für Books –, weil dies zwei verschiedene Kombinationen sind.
SELECT DISTINCT customer, category
FROM orders;So wird Eindeutigkeit geprüft
Die Datenbank vergleicht vollständige Momentaufnahmen der Zeilen. Damit DISTINCT eine Zeile entfernt, müssen alle Spalten in der SELECT-Liste exakt mit einer bereits gefundenen Zeile übereinstimmen.
In unserer Tabelle orders sind die Zeilen 3 und 5 beide (Bob, Electronics, UK) – eine perfekte Übereinstimmung in allen drei Spalten. Daher wird eine der beiden Zeilen entfernt.
SELECT DISTINCT customer, category, country
FROM orders;
-- Row (Bob, Electronics, UK) appears only once
-- even though it occurs on rows 3 and 5Eine teilweise Übereinstimmung wird nicht entfernt
Alice hat zwei Zeilen mit category = Electronics, aber in beiden steht country = US. Wenn alle drei Spalten ausgewählt sind, sind diese beiden ursprünglichen Zeilen identisch, sodass nur eine erhalten bleibt.
Ändern Sie die Auswahl, ändert sich auch der Eindeutigkeitstest.
-- 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;Praxisbeispiel: Eindeutige Paare
Ein häufiges Muster besteht darin, jede eindeutige Kombination aus zwei Attributen zu finden – zum Beispiel, welche Produktkategorien in welchen Ländern verkauft werden, unabhängig davon, wie oft jeder einzelne Verkauf stattgefunden hat.
SELECT DISTINCT category, country
FROM orders
ORDER BY category, country;DISTINCT mit WHERE kombinieren
Sie können Zeilen zunächst mit WHERE filtern. Anschließend entfernt DISTINCT Duplikate aus dem gefilterten Ergebnis. Die beiden Klauseln arbeiten unabhängig voneinander: WHERE schränkt die Daten ein, DISTINCT entfernt Duplikate.
SELECT DISTINCT customer, category
FROM orders
WHERE country = 'US';DISTINCT vs GROUP BY
Eine gleichwertige Möglichkeit, eindeutige Kombinationen zu erhalten, ist GROUP BY. Für das einfache Entfernen von Duplikaten liefern beide Ansätze dasselbe Ergebnis. Der Unterschied wird wichtig, wenn Sie Aggregatfunktionen benötigen: Mit GROUP BY können Sie COUNT(*), SUM() usw. hinzufügen, mit DISTINCT nicht.
-- Using DISTINCT
SELECT DISTINCT customer, category
FROM orders;
-- Equivalent using GROUP BY
SELECT customer, category
FROM orders
GROUP BY customer, category;Eindeutige Kombinationen zählen
Wenn Sie ein mehrspaltiges DISTINCT in eine Unterabfrage einschließen, können Sie zählen, wie viele eindeutige Kombinationen vorhanden sind. So lässt sich die Vielfalt Ihrer Daten bequem messen.
SELECT COUNT(*) AS unique_customer_category_pairs
FROM (
SELECT DISTINCT customer, category
FROM orders
) AS deduped;Häufiger Fehler: DISTINCT gilt für alle Spalten
Ein häufiges Missverständnis besteht darin, dass DISTINCT nur für die zuerst aufgeführte Spalte gilt. Das ist nicht der Fall. DISTINCT berücksichtigt immer die gesamte Zeile, die aus allen ausgewählten Spalten gebildet wird.
Sie können DISTINCT nicht nur auf einige Spalten anwenden und gleichzeitig Duplikate in anderen Spalten beibehalten. Dafür benötigen Sie Fensterfunktionen wie 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;Kurzer Test
Testen Sie Ihr Verständnis von DISTINCT für mehrere Spalten.
Zusammenfassung der Lektion
Sehr gute Arbeit! Das haben Sie über die Verwendung von DISTINCT für mehrere Spalten gelernt:
- DISTINCT gilt für die gesamte Zeile – alle ausgewählten Spalten werden gemeinsam geprüft.
- Eine Zeile wird nur dann entfernt, wenn jede Spalte exakt mit einer bereits gefundenen Zeile übereinstimmt.
- Wenn Sie Spalten in der SELECT-Liste hinzufügen oder entfernen, ändert sich, welche Zeilen als Duplikate gelten.
- Sie können DISTINCT problemlos mit WHERE und ORDER BY kombinieren.
- GROUP BY ist eine gleichwertige Alternative und erforderlich, wenn Sie zusätzlich Aggregatfunktionen benötigen.
Wenn Sie DISTINCT für mehrere Spalten beherrschen, können Sie eindeutige Kombinationen in jedem Datensatz effizient untersuchen.
Häufig gestellte Fragen
Ist die Lektion „DISTINCT für mehrere Spalten“ kostenlos?
Ja — der vollständige Text von „DISTINCT für mehrere Spalten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des SQL Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der SQL Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „DISTINCT für mehrere Spalten“?
Eindeutigkeit über Spaltenkombinationen hinweg Du übst SQL Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um SQL Academy zu starten?
Keine Vorkenntnisse erforderlich. SQL Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „DISTINCT für mehrere Spalten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser SQL Academy-Lektion Code schreiben und ausführen?
Ja. Jede SQL Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Grundlagen von SELECT DISTINCT
- DISTINCT für mehrere Spalten
- PostgreSQL DISTINCT ON
- Eindeutige Werte zählen