In einer Abfrage, die mehrere Spalten aus einer Tabelle abruft, kann es wünschenswert sein, doppelte Zeilen basierend auf a auszuschließen spezifische Spalte, während unterschiedliche Werte in anderen Spalten erhalten bleiben. Dies kann eine Herausforderung sein, da herkömmliche Klauseln wie DISTINCT und GROUP BY auf ganze Zeilen angewendet werden.
Um diesem Bedarf gerecht zu werden, kann die Funktion ROW_NUMBER() eingesetzt werden. Diese Funktion weist jeder Zeile innerhalb einer durch eine bestimmte Spalte definierten Partition eine eindeutige fortlaufende Nummer zu. Durch die Kombination von ROW_NUMBER() mit den Klauseln PARTITION BY und ORDER BY können Sie eine Rangfolge der Zeilen innerhalb jeder Partition basierend auf den Werten in der gewünschten Spalte erstellen.
Betrachten Sie die folgende Abfrage:
SELECT ID, Email, ProductName, ProductModel FROM Products
Um diese Abfrage so zu ändern, dass sie nur eindeutige E-Mails zurückgibt, können wir den folgenden Code verwenden:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) AS rn FROM Products ) AS a WHERE rn = 1
The Die Funktion ROW_NUMBER() unterteilt die Ergebnisse basierend auf der E-Mail-Spalte in Partitionen und weist jeder Zeile einen eindeutigen Rang innerhalb ihrer Partition zu. Die nachfolgende ORDER BY-Klausel stellt sicher, dass die zuletzt vorkommende Zeile in jeder Partition an erster Stelle steht. Die abschließende WHERE-Klausel filtert die Ergebnisse so, dass nur Zeilen mit einem Rang von 1 enthalten sind, wodurch doppelte E-Mails effektiv eliminiert werden.
Mit diesem Ansatz können Sie eine beliebige Spalte als Grundlage für die Partitionierung und Rangfolge angeben und so die Abfrage flexibel anpassen auf Ihre spezifischen Anforderungen zugeschnitten.
Das obige ist der detaillierte Inhalt vonWie kann ich doppelte E-Mails in einer SQL-SELECT-Anweisung eliminieren und gleichzeitig andere Spaltendaten beibehalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!