Maison >base de données >tutoriel mysql >Comment puis-je éliminer les e-mails en double dans une instruction SQL SELECT tout en conservant les autres données de colonne ?

Comment puis-je éliminer les e-mails en double dans une instruction SQL SELECT tout en conservant les autres données de colonne ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-03 04:54:39301parcourir

How Can I Eliminate Duplicate Emails in a SQL SELECT Statement While Retaining Other Column Data?

Élimination des e-mails en double dans SELECT avec DISTINCT pour une seule colonne

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn