24th Nov 2022 7 Leseminuten Welche Rolle spielt DISTINCT in SQL? Andrew Bone Data Engineering Inhaltsverzeichnis SQL DISTINCT für eine einzelne Spalte SQL DISTINCT entfernt doppelte Werte Achten Sie auf die verwendeten Spalten Die Einbeziehung von NULL-Werten SQL DISTINCT mit einer Unterabfrage SQL DISTINCT mit mehreren Spalten SQL DISTINCT mit Aggregatfunktionen DISTINCT mit Aggregatfunktionen und GROUP BY Das Lernen über DISTINCT in SQL ist nur der Anfang! Das Schlüsselwort DISTINCT in SQL spielt eine wichtige Rolle beim Entfernen von doppelten Werten aus Ihren Ergebnissen. In diesem Artikel finden Sie Beispiele, die genau zeigen, wie DISTINCT funktioniert. Standardmäßig werden bei SQL-Abfragen alle zurückgegebenen Zeilen, einschließlich doppelter Zeilen, in der Ergebnismenge angezeigt. Das Schlüsselwort DISTINCT in der Klausel SELECT wird verwendet, um doppelte Zeilen zu eliminieren und eine eindeutige Liste von Werten anzuzeigen. Mit anderen Worten, das Schlüsselwort DISTINCT ruft eindeutige Werte aus einer Tabelle ab. Die grundlegende Syntax des Schlüsselworts DISTINCT in SQL lautet: SELECT DISTINCT column_1, column_2, …, column_n FROM table_name (Wenn Sie die obige Syntax verwirrend finden, sollten Sie den Kurs LearnSQL.de' SQL für Anfänger besuchen. Er behandelt die Grundlagen von SQL, einschließlich des Schlüsselworts DISTINCT.) Beachten Sie, dass das Schlüsselwort DISTINCT vor den von Ihnen angegebenen Spalten stehen muss. Sie können mehr als eine Spalte als DISTINCT angeben, so dass SQL nur eindeutige Kombinationen der Werte dieser Spalten zurückgibt. Wenn Sie mehr als eine Spalte auswählen, werden alle Spalten kombiniert und nur die Eindeutigkeit der Zeile wird berücksichtigt. SQL DISTINCT sucht nach einer eindeutigen Zeile, nicht nach einer eindeutigen Spalte. Lassen Sie uns das Schlüsselwort DISTINCT anhand eines praktischen Beispiels in Aktion sehen. Zunächst sollten wir uns jedoch mit den Daten vertraut machen, mit denen wir arbeiten werden. Stellen Sie sich vor, wir haben eine Tabelle namens employee_infodie Details über die Mitarbeiter unseres Unternehmens enthält: employee_idfirst_namelast_namedepartmentage 127374JoshuaReesSales26 293421KarenBowerSales45 244813LukePayneNULL42 463281MaxPaigeHuman Resources53 374241JuliaGloverHuman Resources29 568421RoseHarrisHuman Resources43 NULLNULLNULLNULLNULL 839211OliviaBakerSales32 293493KarenBowerSales45 463281MaxPaigeHuman Resources53 244813LukePayneNULL42 933821BernadetteParsonsSalesNULL SQL DISTINCT für eine einzelne Spalte Schauen wir uns die Wirkung des Schlüsselworts DISTINCT an, wenn wir versuchen, die Spalte SELECT employee_id zu verwenden. Zunächst sehen wir die Abfrage vor der Anwendung des Schlüsselworts DISTINCT: SELECT employee_id FROM employee_info Das Ergebnis ist das folgende: employee_id 127374 293421 244813 463281 374241 568421 NULL 839211 293493 463281 244813 933821 Die Ausführung dieser Abfrage gibt die gesamte Spalte employee_id aus unserer Tabelle zurück. Diese Spalte stimmt mit der employee_info Tabelle genau. Bei genauerer Analyse können wir einige doppelte Werte erkennen - 244813 und 463281 erscheinen jeweils zweimal. Fügen wir das Schlüsselwort DISTINCT hinzu, um diese doppelten Werte zu beseitigen. Denken Sie daran, dass wir das Schlüsselwort DISTINCT hinzufügen, bevor wir die Spalten angeben: SELECT DISTINCT employee_id FROM employee_info employee_id 127374 293421 244813 463281 374241 568421 NULL 839211 293493 933821 Unser resultierender Datensatz erscheint kürzer; aus dieser Antwort können wir mehrere Dinge lernen. SQL DISTINCT entfernt doppelte Werte Wenn wir die ursprüngliche Tabelle mit unserem Ergebnis vergleichen, können wir sehen, dass die Duplikate erfolgreich herausgefiltert wurden. Die Verwendung des Schlüsselworts DISTINCT ist nur eine Methode zum Entfernen doppelter Werte, wie dieser Artikel über die verschiedenen Möglichkeiten zum Entfernen von Duplikaten in SQL zeigt. Die Tabelle employee_info Tabelle enthielt zwei Vorkommen der folgenden Werte: employee_id 244813 463281 Unser Ergebnis zeigt diese Werte jedoch nur noch einmal an. Das Schlüsselwort DISTINCT hat den gewünschten Effekt erzielt. Achten Sie auf die verwendeten Spalten Wenn Sie die Tabelle zum ersten Mal betrachten employee_info Tabelle sieht es so aus, als ob es sich bei diesen Zeilen um Duplikate handelt. employee_idfirst_namelast_namedepartmentage 293421KarenBowerSales45 293493KarenBowerSales45 Bei näherer Betrachtung können Sie sehen, dass der Wert von employee_id anders ist. Da wir das Schlüsselwort DISTINCT auf diese Spalte employee_id angewendet haben, werden beide Werte zurückgegeben. Die Einbeziehung von NULL-Werten Wahrscheinlich ist Ihnen das Vorhandensein von NULL -Werten in dem zurückgegebenen Datensatz aufgefallen. In SQL wird NULL als eindeutiger Wert betrachtet, d. h. er wird zurückgegeben, wenn das Schlüsselwort DISTINCT verwendet wird. Wenn Sie die Werte von NULL aus dem Ergebnis entfernen möchten, könnten Sie die folgende Abfrage schreiben: SELECT DISTINCT * FROM employee_info WHERE employee_id IS NOT NULL SQL DISTINCT mit einer Unterabfrage Sie können das Schlüsselwort DISTINCT auch als Teil einer Unterabfrage verwenden. Es ist jedoch erwähnenswert, dass eine IN, ANY oder EXISTS Unterabfrage als wahr ausgewertet wird, wenn es mindestens eine Zeile gibt, die die Unterabfrage als wahr auswertet. Dies macht die Verwendung einer DISTINCT mit einer IN, ANY oder EXISTS Unterabfrage unnötig. SQL DISTINCT mit mehreren Spalten Die Spalten, die Sie als DISTINCT angeben, spielen eine wichtige Rolle dabei, welche Daten zurückgegeben werden. Sehen Sie sich die folgende Abfrage an: SELECT DISTINCT employee_id, first_name, last_name FROM employee_info Wir suchen nach eindeutigen Kombinationen dieser drei Spalten. Die Ausführung dieser Abfrage führt zu folgendem Ergebnis: employee_idfirst_namelast_name 127374JoshuaRees 293421KarenBower 244813LukePayne 463281MaxPaige 374241JuliaGlover 568421RoseHarris NULLNULLNULL 839211OliviaBaker 293493KarenBower 933821BernadetteParsons Wenn Sie diese Ergebnismenge durchsuchen, erwarten Sie vielleicht, dass Sie völlig eindeutige Namen zusammen mit deren employee_id sehen. Sehen Sie sich zum Beispiel diese Daten an: employee_idfirst_namelast_name 293421KarenBower 293493KarenBower Der Wert employee_id ist für beide Zeilen eindeutig, was bedeutet, dass diese Zeilen auch als eindeutig betrachtet werden. Wenn wir die Abfrage in die folgende ändern: SELECT DISTINCT first_name, last_name FROM employee_info ... employee_id wird nicht mehr berücksichtigt; jetzt suchen wir nach eindeutigen Kombinationen von Namen. Es wird also nur eine Zeile für "Karen Bower" angezeigt: first_namelast_name JoshuaRees KarenBower LukePayne MaxPaige JuliaGlover RoseHarris NULLNULL OliviaBaker BernadetteParsons Wenn Sie bei der Verwendung des Schlüsselworts DISTINCT nicht die gewünschten Ergebnisse erzielen, achten Sie besonders auf die Spalten, die Sie einbezogen haben. Wenn dieses spezielle Beispiel Sie immer noch verwirrt, lesen Sie diesen Artikel über das Zählen unterschiedlicher Werte in SQL. SQL DISTINCT mit Aggregatfunktionen Das Schlüsselwort DISTINCT kann zusammen mit Aggregatfunktionen verwendet werden. Die gebräuchlichsten Aggregatfunktionen sind: MIN() - Gibt den kleinsten (minimalen) Wert zurück. MAX() - Gibt den größten (maximalen) Wert zurück. SUM() - Gibt die Summe der angegebenen Werte zurück. AVG() - Gibt den Durchschnitt der angegebenen Werte (z. B. in einer Spalte) zurück. COUNT() - Gibt die Anzahl der Elemente zurück (z. B. in einer Spalte). Wenn DISTINCT mit SUM(), AVG() und COUNT() verwendet wird, werden doppelte Werte eliminiert, bevor die Summe, der Durchschnitt oder die Anzahl berechnet wird. Sie können das Schlüsselwort DISTINCT zwar mit MIN() und MAX() verwenden, es ist jedoch sinnlos, dies zu tun; es hat keine Auswirkungen auf die Ergebnisse. Wenden wir diese Informationen auf unser vorheriges Beispiel mit der employee_info Tabelle. Wenn wir die Anzahl der Mitarbeiter zählen wollten, die derzeit in unserem Unternehmen arbeiten, und dabei darauf achten wollten, doppelte Einträge zu entfernen, würden wir die folgende Abfrage schreiben: SELECT COUNT(DISTINCT employee_id) FROM employee_info Das Ergebnis dieser Abfrage ist: COUNT(DISTINCT employee_id) 9 Dies wäre das einfachste Beispiel dafür, wie das Schlüsselwort DISTINCT in Verbindung mit Aggregatfunktionen verwendet werden kann. Die Ausführung dieser Abfrage ohne das Schlüsselwort DISTINCT würde doppelte Werte in die Zählung einschließen: SELECT COUNT(employee_id) FROM employee_info Das Ergebnis dieser Abfrage ist: COUNT(employee_id) 11 Wenn Sie glauben, dass Ihre Tabelle doppelte Datensätze enthalten könnte, ist die Verwendung von DISTINCT eine hervorragende Möglichkeit, um sicherzustellen, dass Ihre Berichte korrekt sind und nicht durch doppelte Werte beeinträchtigt werden. Wenn Ihnen dieser Anwendungsfall nicht klar ist, empfehle ich Ihnen, diesen Artikel über das Zählen unterschiedlicher Werte in SQL zu lesen. Es gibt viele weitere Anwendungsfälle für COUNT(); weitere nützliche Beispiele finden Sie in diesem Artikel, der die Unterschiede zwischen den gängigen Anwendungen der Funktion COUNT() erläutert. DISTINCT mit Aggregatfunktionen und GROUP BY Lassen Sie uns eine Aggregatfunktion mit dem Schlüsselwort DISTINCT verwenden, um ein häufiges Problem zu lösen. Wir möchten die Anzahl der potenziellen doppelten employee_id Einträge für jede Namenspaarung in unserer Tabelle ermitteln. Wir wollen den Fall isolieren, in dem der Name des Mitarbeiters genau derselbe ist, aber mit einem anderen employee_id. Hier ist die Abfrage: SELECT first_name, last_name, COUNT(DISTINCT employee_id) FROM employee_info GROUP BY first_name, last_name Und das Ergebnis: employee_idfirst_nameCOUNT (DISTINCT employee_id) NULLNULL0 BernadetteParsons1 JoshuaRees1 JuliaGlover1 KarenBower2 LukePayne1 MaxPaige1 OliviaBaker1 RoseHarris1 Aus diesen Ergebnissen können wir ersehen, dass wir zwei verschiedene Einträge für Karen Bower's employee_id haben. Dies ist eine hervorragende Information. Wenn es nicht zwei verschiedene Personen mit dem Namen Karen Bower gibt, die in unserem Unternehmen arbeiten, wissen wir, dass diese Information irrtümlich eingegeben wurde und als Duplikat betrachtet werden kann, das entfernt werden muss. Das Lernen über DISTINCT in SQL ist nur der Anfang! Die Fähigkeit, doppelte Daten aus Ihren Abfrageergebnissen zu isolieren und auszuschließen, ist eine wichtige Fähigkeit für alle SQL-Benutzer. Das Schlüsselwort DISTINCT spielt eine wichtige Rolle dabei, dass Sie dies effektiv tun können. Wenn Ihnen dieser Artikel gefallen hat und Sie weiter über SQL lernen möchten, sollten Sie sich unseren SQL-Grundlagen Lernpfad ansehen. Dort lernen Sie die grundlegenden SQL-Anweisungen wie WHERE, GROUP BY, ORDER BY und HAVING. Außerdem erfahren Sie, wie Sie JOIN Tabellen erstellen und Daten in einer Datenbank hinzufügen, ändern oder löschen können. Tags: Data Engineering