Heim >Datenbank >MySQL-Tutorial >Wie kann ich aus einer mehrspaltigen SQL-Abfrage nur eindeutige E-Mail-Adressen abrufen?
DISTINCT für eine bestimmte Spalte
Bei einer Abfrage, die mehrere Spalten wie ID, E-Mail, Produktname und Produktmodell aus den Produkten abruft Tabelle, wie kann sie so geändert werden, dass nur eindeutige E-Mail-Werte angezeigt werden?
Um dieses Problem zu beheben, bieten SQL Server 2005 und spätere Versionen eine Lösung:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1
Diese Abfrage verwendet die Funktion ROW_NUMBER(), um jeder Zeile innerhalb jeder E-Mail-Partition eine Zeilennummer zuzuweisen, sortiert in absteigender Reihenfolge der ID. Die rn-Spalte gibt dann an, welche Zeile in das Endergebnis einbezogen werden soll, da nur diejenigen ausgewählt werden, deren rn gleich 1 ist.
Um die Abfrage weiter zu verfeinern, kann eine WHERE-Klausel hinzugefügt werden, um die Zeilen basierend zu filtern nach bestimmten Kriterien. Um beispielsweise nur Zeilen mit einem bestimmten ProductModel einzuschließen, deren ProductName eine bestimmte Teilzeichenfolge enthält:
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products WHERE ProductModel = 2 AND ProductName LIKE 'CYBER%' ) a WHERE rn = 1
Das obige ist der detaillierte Inhalt vonWie kann ich aus einer mehrspaltigen SQL-Abfrage nur eindeutige E-Mail-Adressen abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!