Maison >base de données >tutoriel mysql >Comment sélectionner des valeurs distinctes dans des colonnes spécifiques dans SQL ?

Comment sélectionner des valeurs distinctes dans des colonnes spécifiques dans SQL ?

DDD
DDDoriginal
2024-12-30 06:35:10302parcourir

How to Select Distinct Values from Specific Columns in SQL?

Sélection DISTINCT pour des colonnes spécifiques

Bien que le mot clé DISTINCT filtre généralement des lignes entières avec des doublons, il peut y avoir des cas où vous avez besoin de valeurs uniquement pour des colonnes spécifiques. Voyons comment y parvenir dans le contexte d'une requête qui récupère les données d'une table Products.

La requête d'origine récupère toutes les colonnes de la table Products :

SELECT ID, Email, ProductName, ProductModel FROM Products

L'objectif est de modifiez la requête pour renvoyer des adresses e-mail uniques, autorisant les doublons dans d'autres colonnes. Pour y parvenir, nous pouvons utiliser la fonction ROW_NUMBER() à côté d'une partition de fenêtre par e-mail.

SELECT *
  FROM (
                SELECT  ID, 
                        Email, 
                        ProductName, 
                        ProductModel,
                        ROW_NUMBER() OVER(PARTITION BY Email ORDER BY ID DESC) rn
                    FROM Products
              ) a
WHERE rn = 1

Voici comment fonctionne cette requête améliorée :

  1. La fonction ROW_NUMBER() attribue un index de ligne unique, 'rn', au sein de chaque partition d'e-mails par ordre décroissant d'ID.
  2. La sous-requête génère une table intermédiaire avec toutes les colonnes de la requête d'origine, ainsi que l'index de ligne 'rn'.
  3. La requête externe filtre ensuite les résultats de la sous-requête pour inclure uniquement les lignes où 'rn' est égal à 1, renvoyant ainsi la plus récente lignes pour chaque e-mail unique.

En conséquence, cette requête modifiée récupère toutes les colonnes de la table Produits, garantissant qu'aucune adresse e-mail en double n'est présent.

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