Retour à la liste des articles Articles
6 minutes de lecture

Comment trouver des doublons en SQL

Les enregistrements en double, font perdre du temps, de l'espace et de l'argent. Apprenez à trouver et à corriger les valeurs en double à l'aide des clauses GROUP BY et HAVING de SQL.

Les meilleures pratiques en matière de bases de données imposent généralement de disposer de contraintes uniques (telles que la clé primaire) sur une table afin d'éviter la duplication des lignes lors de l'extraction et de la consolidation des données. Cependant, vous pouvez vous retrouver à travailler sur un ensemble de données comportant des lignes en double. Cela peut être dû à une erreur humaine, à un bug de l'application ou à des données non nettoyées qui ont été extraites et fusionnées à partir de sources externes, entre autres.

Pourquoi corriger les valeurs en double ? Elles peuvent perturber les calculs. Elles peuvent même coûter de l'argent à une entreprise ; par exemple, une entreprise de commerce électronique peut traiter plusieurs fois des commandes de clients en double, ce qui peut avoir un impact direct sur les résultats de l'entreprise.

Dans cet article, nous allons voir comment vous pouvez trouver ces doublons en SQL en utilisant les fonctions GROUP BY et HAVING.

Comment trouver les doublons en SQL

Tout d'abord, vous devez définir les critères de détection des lignes en double. S'agit-il d'une combinaison de deux colonnes ou plus dans laquelle vous voulez détecter les valeurs en double, ou bien cherchez-vous simplement les doublons dans une seule colonne ?

Dans les exemples ci-dessous, nous allons explorer ces deux scénarios en utilisant une simple base de données de commandes clients.

En termes d'approche générale pour un scénario ou l'autre, la recherche de valeurs en double en SQL comprend deux étapes clé :

  1. L'utilisation de la clause GROUP BY pour regrouper toutes les lignes par la ou les colonnes cible, c'est-à-dire la ou les colonnes sur lesquelles vous voulez vérifier les valeurs en double.
  2. Utiliser la fonction COUNT dans la clause HAVING pour vérifier si l'un des groupes comporte plus d'une entrée ; il s'agit des valeurs en double.

Pour un rafraîchissement visuel rapide sur GROUP BY, consultez la vidéo SQL GROUP BY de notre série We Learn SQL. Notre cours Exercices Pratiques de SQL offre plus de 80 exercices SQL pratiques pour éprouver ces concepts dans les moindres détails.

Valeurs en double dans une colonne

Nous allons vous montrer comment trouver des valeurs en double dans une seule colonne. Pour cet exemple, nous allons utiliser la table Commandes, une version modifiée de la table que nous avons utilisée dans mon article précédent sur l'utilisation de GROUP BY en SQL. Un exemple de la table est présenté ci-dessous.

CommandeIdClientIdEmployeIdDateDeLaCommandeExpediteurId
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102518431996-07-081
102527641996-07-092
104436681997-02-121

Dans cet exemple, il y a quelques doublons dans la colonne CommandeId. Idéalement, chaque ligne devrait avoir une valeur unique pour CommandeId, puisque chaque commande individuelle se voit attribuer sa propre valeur. Pour une raison quelconque, cela n'a pas été mis en œuvre ici. Pour trouver les doublons, nous pouvons utiliser la requête suivante :

SELECT CommandeId, COUNT(CommandeId)
FROM Commandes
GROUP BY CommandeId
HAVING COUNT(CommandeId) > 1

RÉSULTAT

Nombre d'enregistrements : 2

CommandeIdCOUNT(CommandeId)
102512
102762

Comme nous pouvons le voir, CommandeId 10251 (que nous avons vu dans l'exemple de table ci-dessus) et CommandeId 10276 ont des doublons.

L'utilisation des clauses GROUP BY et HAVING permet de mettre en évidence les doublons dans vos données. Après avoir vérifié que les lignes sont identiques, vous pouvez choisir de supprimer le ou les doublons à l'aide de l'instruction DELETE pour les supprimer.

Valeurs en double dans plusieurs colonnes

Souvent, vous êtes intéressé par la recherche de lignes pour lesquelles une combinaison de quelques colonnes correspond. Dans cet exemple, nous utiliserons la table DetailsDeLaCommande dont un exemple est présenté ci-dessous.

DetailDeLaCommandeIdCommandeIdProduitIdQuantite
1102481112
2102484210
310248725
410249149
510249142
6102495140
520104432812

Nous voulons trouver les entrées où les colonnes CommandeId et ProduitId sont identiques. Ce type de doublon signifie probablement qu'il y a un bug dans le système de commande, puisque chaque commande ne traite chaque produit de cette commande qu'une seule fois dans le panier. Si plusieurs quantités de ce produit sont commandées, la valeur Quantite sera simplement augmentée ; des lignes distinctes (en double) ne devraient pas être créées. Un problème de ce type peut avoir un impact négatif sur les opérations commerciales si les commandes sont remplies, emballées et expédiées automatiquement.

Pour trouver les doublons dans les valeurs de plusieurs colonnes, nous pouvons utiliser la requête suivante. Elle est très similaire à celle utilisée pour une seule colonne :

SELECT CommandeId, ProduitId, COUNT(*)
FROM DetailsDeLaCommande
GROUP BY CommandeId, ProduitId
HAVING COUNT(*) > 1 

RÉSULTAT

Nombre d'enregistrements : 2

Ci-dessus, nous pouvons confirmer que le système de commande a effectivement un bug. Comme le premier exemple utilisant une seule colonne, ce deuxième exemple nous permet également de trouver des erreurs dans le système de commande. Dans ce cas, les produits sont enregistrés comme une nouvelle commande alors qu'ils ont été ajoutés au même panier par le même client. Maintenant, vous, en tant que propriétaire de l'entreprise, pouvez prendre les mesures correctives appropriées pour remédier à ce bug dans votre système de gestion des commandes.

Notez que ci-dessus, nous avons utilisé COUNT(*) et non un compteur spécifique à une colonne comme COUNT(CommandeId). COUNT(*) compte toutes les lignes, alors que COUNT (Column) ne compte que les valeurs non nulles dans la colonne spécifiée. Toutefois, dans cet exemple, cela n'aura fait aucune différence, car il n'y avait aucune valeur nulle dans les deux colonnes regroupées.

Maîtriser le traitement des valeurs dupliquées

La recherche de doublons en SQL concerne principalement les contrôles de qualité/rationalité et la validation des données. Ces contrôles sont souvent appliqués aux opérations quotidiennes d'un grand nombre de petites et moyennes entreprises.

En outre, il s'agit d'une question d'entretien très courante pour les ceux qui s'occupent de science des données et les analystes ! C'est donc une bonne chose que vous connaissiez maintenant les bases pour aborder cette question. Cependant, il va sans dire que vous aurez besoin de plus de pratique pour voir clairement les nuances apportées par le caractère unique de chaque ensemble de données et les critères que vous devez appliquer pour ces contrôles de rationalité et de qualité.

Pour mieux comprendre le traitement des enregistrements en double, je recommande vivement le cours LearnSQL SQL pour les débutants de LearnSQL, qui couvre ces concepts de manière holistique, avec un ensemble complet d'exercices pratiques.