Zurück zur Artikelliste Artikel
5 Leseminuten

Wie man doppelte Werte in SQL findet

Doppelte Datensätze verschwenden Zeit, Platz und Geld. Lerne, wie du mit den SQL-Klauseln GROUP BY und HAVING doppelte Werte finden und beseitigen kannst.

Bewährte Datenbankverfahren schreiben normalerweise vor, dass eine Tabelle eindeutige Einschränkungen (wie den Primärschlüssel) haben muss, um doppelte Zeilen zu verhindern, wenn Daten extrahiert und konsolidiert werden. Es kann jedoch vorkommen, dass du an Datenmengen mit doppelten Zeilen arbeitest. Das kann z.B. auf menschliches Versagen, einen Anwendungsfehler oder nicht bereinigte Daten zurückzuführen sein, die aus externen Quellen extrahiert und zusammengeführt wurden.

Warum doppelte Werte korrigieren? Sie können die Berechnungen durcheinander bringen. Sie können ein Unternehmen sogar Geld kosten. Ein E-Commerce-Unternehmen könnte zum Beispiel doppelte Kundenbestellungen mehrfach bearbeiten, was sich direkt auf den Gewinn des Unternehmens auswirken kann.

In diesem Artikel werden wir besprechen, wie du diese Duplikate in SQL finden kannst, indem du die GROUP BY und HAVING Klauseln verwendest.

So findest du doppelte Werte in SQL

Zunächst musst du die Kriterien für die Erkennung doppelter Zeilen festlegen. Handelt es sich um eine Kombination aus zwei oder mehr Spalten, in denen du doppelte Werte erkennen willst. Oder suchst du einfach nach Duplikaten in einer einzelnen Spalte?

In den folgenden Beispielen werden wir diese beiden Szenarien anhand einer einfachen Kundenbestellungsdatenbank untersuchen.

Der allgemeine Ansatz für beide Szenarien besteht darin, dass die Suche nach doppelten Werten in SQL zwei wichtige Schritte umfasst:

  1. Die GROUP BY Klausel verwenden, um alle Zeilen nach der/den Zielspalte(n) zu gruppieren - d.h. nach der/den Spalte(n), die du auf doppelte Werte überprüfen willst.
  2. Mit der Funktion COUNT in der HAVING-Klausel prüfst du, ob eine der Gruppen mehr als einen Eintrag enthält.

Eine kurze visuelle Auffrischung zu GROUP BY findest du im Video SQL GROUP BY aus unserer We Learn SQL Serie. Unser SQL-Übungssatz Kurs bietet über 80 praktische SQL-Übungen, um diese Konzepte im Detail zu üben.

Doppelte Werte in einer Spalte

Hier zeigen wir dir, wie du doppelte Werte in einer einzigen Spalte finden kannst. Für dieses Beispiel verwenden wir die Tabelle "Bestellungen", eine modifizierte Version der Tabelle, die wir in meinem vorherigen Artikel über die Verwendung von GROUP BY in SQL verwendet haben. Ein Beispiel für die Tabelle ist unten abgebildet.

Bestell_IdKunden_IdMitarbeiter_IdDatum_Der_BestellungVersender_Id
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102518431996-07-081
102527641996-07-092
104436681997-02-121

In diesem Beispiel gibt es ein paar Duplikate in der Spalte Bestell_Id. Idealerweise sollte jede Zeile einen eindeutigen Wert für Bestell_Id haben, da jeder einzelnen Bestellung ein eigener Wert zugewiesen wird. Aus irgendeinem Grund wurde das hier nicht umgesetzt. Um die Duplikate zu finden, können wir die folgende Abfrage verwenden:

SELECT Bestell_Id, COUNT(Bestell_Id)
FROM Bestellungen
GROUP BY Bestell_Id
HAVING COUNT(Bestell_Id) > 1

ERGEBNIS

Anzahl der Datensätze: 2

Bestell_IdCOUNT(Bestell_Id)
102512
102762

Wie wir sehen können, gibt es in Bestell_Id 10251 (die wir im Tabellenbeispiel oben gesehen haben) und Bestell_Id 10276 Duplikate.

Mit den Klauseln GROUP BY und HAVING kannst du die Duplikate in deinen Daten übersichtlich darstellen. Wenn du überprüft hast, dass die Zeilen identisch sind, kannst du das/die Duplikat(e) mit der DELETE Anweisung entfernen.

Doppelte Werte in mehreren Spalten

Oft bist du daran interessiert, Zeilen zu finden, in denen eine Kombination aus mehreren Spalten übereinstimmt. Für dieses Beispiel verwenden wir die Details_Zur_Bestellung Tabelle, von der wir unten ein Beispiel sehen.

Auftrag_Detail_IdBestell_IdProdukt_IdMenge
1102481112
2102484210
310248725
410249149
510249142
6102495140
520104432812

Wir wollen Einträge finden, bei denen die Spalten Bestell_Id und Produkt_Id identisch sind. Diese Art von Duplikaten bedeutet wahrscheinlich, dass es einen Fehler im Bestellsystem gibt, da jedes Produkt in der Bestellung nur einmal im Warenkorb verarbeitet wird. Wenn mehrere Mengen dieses Produkts bestellt werden, wird der Wert von Menge einfach erhöht; separate (doppelte) Zeilen sollten nicht erstellt werden. Ein solcher Fehler kann sich negativ auf den Geschäftsbetrieb auswirken, wenn die Bestellungen automatisch erfüllt, verpackt und versendet werden.

Um Duplikate in mehreren Spaltenwerten zu finden, können wir die folgende Abfrage verwenden. Sie ist derjenigen für eine einzelne Spalte sehr ähnlich:

SELECT Bestell_Id, Produkt_Id, COUNT(*)
FROM Details_Zur_Bestellung
GROUP BY Bestell_Id, Produkt_Id
HAVING COUNT(*) > 1 

ERGEBNIS

Anzahl der Datensätze: 2

Hier können wir bestätigen, dass das Bestellsystem tatsächlich einen Fehler hat. Wie im ersten Beispiel mit einer einzelnen Spalte können wir auch in diesem zweiten Beispiel Fehler im Bestellsystem finden. In diesem Fall werden die Produkte als neue Bestellung registriert, obwohl sie von demselben Kunden in denselben Warenkorb gelegt wurden. Jetzt kannst du als Unternehmer geeignete Korrekturmaßnahmen ergreifen, um diesen Fehler in deinem Bestellsystem zu beheben.

Beachte, dass wir oben COUNT(*) und nicht einen spaltenspezifischen Zähler wie COUNT(Bestell_Id) verwendet haben. COUNT(*) zählt alle Zeilen, während COUNT (Column) nur Nicht-Null-Werte in der angegebenen Spalte zählt. In diesem Beispiel macht es jedoch keinen Unterschied, denn in keiner der beiden Spalten, die gruppiert wurden, gab es Nullwerte.

Meistere den Umgang mit doppelten Werten

Beim Auffinden von Duplikaten in SQL geht es hauptsächlich um Qualitäts-/Plausibilitätsprüfung und Datenvalidierung. Diese Prüfungen werden in vielen kleinen und mittleren Unternehmen im Tagesgeschäft durchgeführt.

Außerdem ist dies eine sehr häufig gestellte Frage in Vorstellungsgesprächen für Data Science/Analysten-Stellen! Gut, dass du jetzt die Grundlagen kennst, wie du diese Frage angehen kannst. Aber es versteht sich von selbst, dass du mehr Übung brauchst, um die Nuancen zu erkennen, die die Eindeutigkeit jedes Datensatzes mit sich bringt, und um herauszufinden, welche Kriterien du für diese Plausibilitäts- und Qualitätsprüfungen anwenden solltest.

Um den Umgang mit doppelten Datensätzen besser in den Griff zu bekommen, empfehle ich den LearnSQL SQL für Anfänger Kurs empfehlen, der diese Konzepte ganzheitlich und mit vielen praktischen Übungen abdeckt.