1 Einleitung Wenn wir SQL-Anweisungen schreiben, um Daten in der Datenbank zu verarbeiten, können wir auf einige unangenehme Probleme stoßen. Beispielsweise müssen wir für Datensätze mit demselben Namen im selben Feld nur einen anzeigen, aber tatsächlich kann die Datenbank mehrere Datensätze mit demselben Namen enthalten. Daher werden beim Abrufen mehrere Datensätze angezeigt, was unserer ursprünglichen Absicht widerspricht! Um diese Situation zu vermeiden, müssen wir daher eine „Deduplizierung“ durchführen. Was ist also „Deduplizierung“? Vereinfacht ausgedrückt bedeutet dies, dass für das gleiche Feld nur ein Datensatz mit dem gleichen Inhalt angezeigt wird. Wie lässt sich also die Funktion „Deduplizierung“ erreichen? In dieser Hinsicht haben wir zwei Möglichkeiten, diese Funktion zu erreichen. Die erste Methode besteht darin, beim Schreiben der Select-Anweisung das Schlüsselwort distinct hinzuzufügen. Die zweite Methode besteht darin, beim Schreiben der Select-Anweisung die Funktion row_number() over() aufzurufen. Beide oben genannten Methoden können die Funktion „Deduplizierung“ erreichen. Was sind also die Ähnlichkeiten und Unterschiede zwischen ihnen? Anschließend gibt der Autor eine ausführliche Erklärung. 2 verschiedene In SQL wird das Schlüsselwort distinct verwendet, um eindeutig unterschiedliche Werte zurückzugeben. Das Syntaxformat lautet: SELECT DISTINCT Spaltenname FROM Tabellenname Angenommen, es gibt eine Tabelle „CESHIDEMO“ mit zwei Feldern, NAME und AGE, im folgenden Format: Wenn wir die obige Tabelle betrachten, werden wir feststellen, dass es zwei Datensätze mit demselben NAMEN und drei Datensätze mit demselben ALTER gibt. Wenn wir die folgende SQL-Anweisung ausführen, /** * Wobei PPPRDER der Name des Schemas ist, d. h. die Tabelle CESHIDEMO befindet sich in PPPRDER*/ Wählen Sie den Namen aus PPPRDER.CESHIDEMO Sie erhalten folgendes Ergebnis: Wenn wir das Ergebnis beobachten, werden wir feststellen, dass es unter den obigen vier Datensätzen zwei Datensätze mit demselben NAME-Wert gibt, d. h. die Werte des zweiten und dritten Datensatzes sind beide „gavin“. Wenn wir also nur einen Datensatz mit demselben NAMEN anzeigen möchten, wie können wir das erreichen? Zu diesem Zeitpunkt müssen Sie das Schlüsselwort „distinct“ verwenden! Führen Sie als Nächstes die folgende SQL-Anweisung aus: Wählen Sie einen eindeutigen Namen aus PPPRDER.CESHIDEMO Sie erhalten folgendes Ergebnis: Betrachtet man das Ergebnis, ist es offensichtlich, dass unsere Anforderungen erfüllt wurden! Allerdings stellt sich die Frage: Welchen Effekt hat es, wenn das Schlüsselwort „distinct“ gleichzeitig auf zwei Felder angewendet wird? Nachdem wir darüber nachgedacht haben, versuchen wir es und führen die folgende SQL-Anweisung aus: Wählen Sie eindeutigen Namen und Alter aus PPPRDER.CESHIDEMO Die Ergebnisse sind wie folgt: Beobachten Sie das Ergebnis. Ups, es scheint keine Wirkung zu haben? Sie hat alle Rekorde gezeigt! Es gibt zwei Datensätze mit demselben NAME-Wert und drei Datensätze mit demselben AGE-Wert. Es gibt überhaupt keine Änderung! Aber tatsächlich sollte das Ergebnis so aussehen. Denn wenn distinct auf mehrere Felder angewendet wird, werden nur die Datensätze mit denselben Feldwerten entfernt . Offensichtlich erfüllen unsere vier „schlechten“ Datensätze diese Bedingung nicht, sodass distinct davon ausgeht, dass die obigen vier Datensätze nicht gleich sind. Worte reichen nicht aus, also fügen wir zur Überprüfung einen identischen Datensatz zur Tabelle „CESHIDEMO“ hinzu. Die Tabelle sieht nach dem Hinzufügen eines Datensatzes folgendermaßen aus: Führen Sie dann die folgende SQL-Anweisung aus: Wählen Sie eindeutigen Namen und Alter aus PPPRDER.CESHIDEMO Die Ergebnisse sind wie folgt: Wenn wir die Ergebnisse betrachten, können wir unsere obige Schlussfolgerung eindeutig bestätigen. Darüber hinaus gibt es einen Punkt, auf den Sie besonders achten müssen : Das Schlüsselwort distinct kann nur am Anfang aller Felder in der SQL-Anweisung stehen, damit es funktioniert. Wenn es an der falschen Stelle steht, meldet SQL zwar keinen Fehler, hat aber auch keine Auswirkung. 3 Zeilennummer() über() In der SQL Server-Datenbank steht uns eine Funktion row_number() zur Nummerierung von Datensätzen in der Datenbanktabelle zur Verfügung. Bei Verwendung folgt darauf eine Funktion over(), und die Funktion over() wird zum Gruppieren und Sortieren der Datensätze in der Tabelle verwendet. Die für beide verwendete Syntax ist: ROW_NUMBER() ÜBER(PARTITION NACH SPALTE1 ORDER NACH SPALTE2) Bedeutung: Gruppieren Sie die Datensätze in der Tabelle nach dem Feld COLUMN1 und sortieren Sie sie nach dem Feld COLUMN2, wobei PARTITION BY: zeigt die Gruppierung an ORDER BY: zeigt die Sortierung an Als nächstes testen wir auch mit den Daten in der Tabelle „CESHIDEMO“. Zunächst werden unten die Abfrageergebnisse ohne Verwendung der Funktion row_number() over() angezeigt: Führen Sie dann die folgende SQL-Anweisung aus: Wählen Sie PPPRDER.CESHIDEMO.*, row_number() über (Partition nach Alter, sortiert nach Name absteigend) aus PPPRDER.CESHIDEMO Die Ergebnisse sind wie folgt: Aus den obigen Ergebnissen können wir ersehen, dass es basierend auf der Originaltabelle eine zusätzliche Spalte gibt, die mit numerischer Sortierung gekennzeichnet ist. Wenn wir dann die SQL-Anweisung, die wir rückwärts ausführen, analysieren, werden wir feststellen, dass sie tatsächlich nach dem Wert des Felds ALTER gruppiert und nach dem Wert des Felds NAME sortiert ist! Damit ist die Funktionalität der Funktion nachgewiesen. Als Nächstes wollen wir untersuchen, wie die Funktion row_number() over() verwendet wird, um die Funktion „Deduplizierung“ zu erreichen. Durch Beobachtung der obigen Ergebnisse können wir feststellen, dass wir möglicherweise die Funktion „Deduplizierung“ erreichen können, wenn wir nach NAMEN gruppieren, nach ALTER sortieren und dann den ersten Datensatz in jeder Gruppe nehmen! Versuchen Sie es dann und führen Sie die folgende SQL-Anweisung aus: /* *rn gibt die letzte hinzugefügte Spalte an*/ Wählen Sie * aus (wählen Sie PPPRDER.CESHIDEMO.*, row_number() über (Partition nach Name, sortiert nach Alter absteigend) rn aus PPPRDER.CESHIDEMO) wobei rn = 1 Nach dem Ausführen sind die Ergebnisse wie folgt: Bei der Betrachtung der obigen Ergebnisse stellen wir fest, dass wir die Funktion zum „Deduplizieren“ von Daten versehentlich erreicht haben! Wenn wir jedoch vorsichtig sind, werden wir etwas Unangenehmes feststellen. Das heißt, wenn wir die obige SQL-Anweisung zur „Deduplizierung“ ausführen, wird ein Datensatz mit dem NAME-Wert „gavin“ und dem AGE-Wert „18“ herausgefiltert. Im wirklichen Leben kommt es jedoch sehr häufig vor, dass der gleiche Name, aber ein unterschiedliches Alter vorliegt. 4 Fazit Durch das Lesen und Anwenden des obigen Inhalts wissen wir bereits, dass die Funktion zum „Deduplizieren“ von Daten entweder durch die Verwendung des Schlüsselworts „distinct“ oder der Funktion „row_number()“ over() erreicht werden kann. Allerdings müssen wir bei der Implementierung besonders auf die Nutzungseigenschaften und Unterschiede zwischen beiden achten. Bei der Verwendung des Schlüsselworts distinct müssen wir wissen, dass es einen Unterschied gibt, ob es auf einem einzelnen Feld oder auf mehreren Feldern funktioniert. Wenn es auf einem einzelnen Feld funktioniert, „dedupliziert“ es alle Daten mit doppelten Werten in dem Feld in der Tabelle; wenn es auf mehreren Feldern funktioniert, „dedupliziert“ es Daten mit denselben Werten in allen Feldern in der Tabelle (also den mehreren Feldern, auf die distinct funktioniert). Bei Verwendung der Funktion row_number() over() werden zunächst die Datensätze gruppiert und sortiert, anschließend wird der erste Datensatz jeder Gruppe herausgenommen, um eine „Deduplizierung“ durchzuführen (wie in diesem Blogbeitrag). Natürlich können wir auch hier verschiedene Einschränkungen verwenden, um „Deduplizierung“ durchzuführen. Wie man das konkret umsetzt, muss jeder selbst überlegen! Abschließend erläutert der Autor in diesem Blogbeitrag sein Verständnis der Verwendung des Schlüsselworts distinct und der Funktion row_number() over() zum „Deduplizieren“ von Daten. Ich hoffe, der obige Inhalt kann für alle hilfreich sein! Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site! |
<<: Detaillierte Erklärung asynchroner Generatoren und asynchroner Iterationen in Node.js
>>: Freundliche Alternativen zum Find Tool in Linux
Inhaltsverzeichnis Hörer beobachten Format Richte...
In diesem Artikel wird der spezifische Code zur I...
Heute stelle ich zwei HTML-Tags vor, die ich nich...
Im Linux-System gibt es einen Dateityp namens Lin...
Mauseffekte erfordern die Verwendung von setTimeo...
Haftungsausschluss: Da das Projekt die Verwendung...
Bei Verwendung des Tags <html:reset> stellen...
Laden Sie zuerst die Abhängigkeiten herunter Garn...
Code kopieren Der Code lautet wie folgt: <styl...
Inhaltsverzeichnis 1. Installieren Sie das Proxy-...
Vorwort Beim Einsatz von Docker in einer Produkti...
0. Als ich dieses Dokument erstellte, war es unge...
Supervisor ist ein sehr gutes Daemon-Verwaltungst...
Wirkung Derzeit gibt es 2 Projekte (Projekt1, Pro...
Inhaltsverzeichnis Erstellen Sie ein Vite-Projekt...