Dans une requête qui récupère plusieurs colonnes d'une table, il peut être souhaitable d'exclure les lignes en double en fonction d'un colonne spécifique tout en préservant les valeurs distinctes dans les autres colonnes. Cela peut être difficile car les clauses traditionnelles telles que DISTINCT et GROUP BY opèrent sur des lignes entières.
Pour répondre à ce besoin, la fonction ROW_NUMBER() peut être utilisée. Cette fonction attribue un numéro séquentiel unique à chaque ligne d'une partition définie par une colonne spécifiée. En combinant ROW_NUMBER() avec les clauses PARTITION BY et ORDER BY, vous pouvez créer un classement des lignes dans chaque partition en fonction des valeurs de la colonne souhaitée.
Considérez la requête suivante :
SELECT ID, Email, ProductName, ProductModel FROM Products
Pour modifier cette requête afin qu'elle ne renvoie que des emails uniques, nous pouvons utiliser le code suivant :
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
Le ROW_NUMBER() La fonction divise les résultats en partitions basées sur la colonne Email et attribue à chaque ligne un rang unique au sein de sa partition. La clause ORDER BY suivante garantit que la dernière ligne apparaissant dans chaque partition est classée en premier. La clause WHERE finale filtre les résultats pour inclure uniquement les lignes de rang 1, éliminant ainsi efficacement les e-mails en double.
Cette approche vous permet de spécifier n'importe quelle colonne comme base de partitionnement et de classement, offrant ainsi une flexibilité dans l'adaptation de la requête. à vos besoins spécifiques.
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!