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
Libérer: 2025-01-03 04:54:39
original
271 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal