18th May 2022 6 minutes de lecture Comment trouver des doublons en SQL Zahin Rahman sql apprendre sql group by ORDER BY Table des matières Comment trouver les doublons en SQL Valeurs en double dans une colonne RÉSULTAT Valeurs en double dans plusieurs colonnes RÉSULTAT Maîtriser le traitement des valeurs dupliquées 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é : 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. 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. Tags: sql apprendre sql group by ORDER BY