Élimination des doublons d'e-mails dans la requête SQL avec DISTINCT
Dans la requête SQL fournie, vous souhaitez la modifier pour renvoyer des entrées d'e-mail uniques tout en permettant doublons dans d’autres colonnes. Étant donné que DISTINCT et GROUP BY opèrent sur des lignes entières, une approche différente est nécessaire pour atteindre cet objectif.
La solution réside dans l'incorporation d'une sous-requête qui exploite la fonction ROW_NUMBER() de SQL Server. En partitionnant l'ensemble de données en fonction de l'e-mail et en le triant par ID décroissant à l'aide de la fonction ROW_NUMBER(), nous pouvons attribuer un classement unique à chaque ligne de chaque groupe d'e-mails.
La requête principale sélectionne ensuite toutes les lignes où le la valeur de classement (rn) est égale à 1, garantissant qu'une seule ligne pour chaque e-mail distinct est incluse dans les résultats.
Voici la valeur modifiée requête :
SELECT * FROM ( SELECT ID, Email, ProductName, ProductModel, ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn FROM Products ) a WHERE rn = 1
Cette requête élimine efficacement les e-mails en double tout en préservant les doublons dans d'autres colonnes. Vous pouvez affiner davantage la requête en ajoutant des filtres conditionnels à la sous-requête, comme illustré dans cet exemple :
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
Cette requête modifiée limite les résultats aux produits avec un ProductModel de 2 et des noms commençant par « CYBER % ', en conservant les entrées d'e-mail non dupliquées selon ces critères.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!