Accueil Recherche | Plan Technique | Liens | Actualités | Formation | Emploi | Forums | Base
TUTORIEL cerig.efpg.inpg.fr 
Vous êtes ici : Accueil > Formation > Tutoriels > Bases de données relationnelles > Le comptage et l'élimination des doublons
        Révision : 27 janvier 2003
 
                  Les bases de données
relationnelles
                 
Chap.
précéd.
Plan du
tutoriel
Liste des
tutoriels
Chap.
suivant
 
Chapitre 15 : le comptage et l'élimination des doublons
 
1 - Introduction
                  Nous poursuivons notre étude du regroupement (commencée au chapitre précédent) dans le cas particulier où la fonction utilisée est "Compte". Cette fonction n'effectue pas d'opération ; comme son nom l'indique, elle fournit le nombre d'enregistrements regroupés, dans la colonne où on lui demande d'opérer.          
Pour créer des exemples de requête, nous utilisons la table du chapitre précédent, dans laquelle nous avons supprimé une donnée (le chiffre d'affaires de l'agence Est pour la journée du 7 janvier 2003 n'a pas été communiqué au siège de l'entreprise -- quelqu'un va se faire tirer les oreilles). La table est représentée ci-dessous.
Date Agence CA
06/01/2003 Nord 927,02 €
06/01/2003 Sud 1 098,46 €
06/01/2003 Est 561,29 €
07/01/2003 Nord 1 385,55 €
07/01/2003 Est
07/01/2003 Sud 1 401,56 €
Comme pour les autres chapitres de ce tutoriel (ou tutorial, ou cours en ligne), nous utilisons le SGBD Access comme support technique.
2 - Le regroupement avec comptage
                  Nous créons une requête dans laquelle :          
            le regroupement est effectué sur le champ "Date" ;
  l'opération de comptage concerne le champ "CA".
Les deux figures ci-dessous représentent la requête de regroupement (à gauche), et la feuille de données résultante (à droite).
Regroupement avec comptage (requête) Regroupement avec comptage (résultat)
Nous remarquons immédiatement que la fonction "Compte" ne prend pas en compte les enregistrements vides. Il est d'usage de dire que la fonction "Compte" ignore les "Null".
3 - Le comptage des doublons
                  Nous pouvons appliquer la fonction "Compte" au champ de regroupement lui-même. Dans le cas du champ "Date", les deux figures ci-dessous représentent la requête de regroupement (à gauche), et la feuille de données résultante (à droite).          
Comptage des doublons (requête) Comptage des doublons (résultat)
Nous disposons ainsi d'un moyen de compter les doublons -- à condition d'admettre qu'une valeur qui n'apparaît qu'une seule fois (et sera comptée comme telle) fait partie des doublons. Si nous prenons le terme "doublon" au sens strict, nous devons rajouter, dans la colonne de comptage, sur la ligne "Critères :", un filtre qui ne conserve que les valeurs supérieures à l'unité (>1). Nous reconnaissons au passage un exemple de filtrage après regroupement.
Le SGBD Access possède un assistant de comptage des doublons, et il est instructif de regarder comment il fonctionne. Dans la fenêtre "Base de données", nous sélectionnons l'objet "Requêtes", nous cliquons sur l'icône "Nouveau", nous sélectionnons "Assistant Requête trouver les doublons", et nous cliquons sur "OK". Nous demandons le comptage des doublons sur le seul champ "Date", et nous observons la manière dont la requête est formulée (figure ci-dessous).
Comptage des doublons (assistant Access)
Surprise ! Le regroupement et le comptage sont bien effectués sur le même champ "Date", mais le regroupement et l'affichage du champ sont disjoints. Cette complication, qui apparaît comme inutile, trouverait-elle sa source dans le désir d'assurer la compatibilité avec une ancienne version d'Access, ou avec d'autres SGBD ? L'auteur de ces lignes donne sa langue au chat.
4 - L'élimination des doublons
                  De la table qui nous sert d'exemple, extrayons une nouvelle table ne contenant que la colonne "Agence". Cette table contient des doublons, puisque toutes les agences y sont citées deux fois. Il suffit d'opérer une sélection avec regroupement, mais sans comptage des doublons, pour éliminer les doublons de la table. Le regroupement est une bonne technique de dédoublonnage, que nous avons déjà utilisée au chapitre 11, pour un exemple de doublons sur deux champs.          
La table de départ, la requête et son résultat sont représentés ci-dessous.
Dédoublonnage (départ) Dédoublonnage (requête) Dédoublonnage (résultat)
Soyons concis : pour dédoublonner, il suffit de regrouper sans compter.
5 - Le comptage sans regroupement
                  En faisant exactement l'inverse, c'est à dire en comptant sans regrouper, nous déterminons le nombre d'enregistrements (non Null) présents dans une ou plusieurs colonnes. La figure ci-dessous représente la requête correspondante (en haut) et la feuille de données résultante (en bas). Au passage, nous vérifions que, dans la colonne CA, la fonction "Compte" a négligé la case vide.          
Comptage d'enregistrements (requête)

Comptage d'enregistrements (résultat)

Nous pouvons ainsi déterminer le nombre d'enregistrements d'une table, à condition que nous soyons sûrs que la colonne utilisée pour l'opération ne contient pas de case vide. Nous pouvons songer à utiliser une colonne dans laquelle le Null est interdit, mais il n'en n'existe pas toujours. Pour nous affranchir du comptage sur une colonne particulière, nous procédons comme suit :
            nous ajoutons la table "Résultats" dans la fenêtre de création de la requête, mais nous n'introduisons aucun champ dans la grille ;
  sur la ligne "Champ :", nous inscrivons le nom de la colonne dans laquelle figurera le résultat du comptage, soit par exemple "Comptage" ;
  nous faisons suivre ce nom de deux points et d'un espace. Le SGBD sait alors que la suite définit le contenu du champ ;
  à la suite, nous écrivons la fonction Compte(*). L'astérisque indique au SGBD qu'il doit compter les lignes de la table, sans utiliser de colonne particulière ;
  sur la ligne "Table :", nous n'inscrivons rien. En effet, la colonne que nous allons créer n'appartient à aucune table. Par contre, le SGBD sait que la fonction "Compte(*)" s'applique à la table "Résultats", qu'il était donc indispensable d'introduire dans la fenêtre.
Le principe de l'opération est simple. Nous créons une requête sélection sans introduire aucun des champs de la table sélectionnée. Nous demandons à cette requête de créer un nouveau champ, auquel nous donnons un nom (indispensable pour l'affichage). Nous définissons le contenu de ce nouveau champ à l'aide la fonction "Compte()" qui compte des lignes. Nous utilisons l'astérisque comme argument, de telle sorte que la fonction compte les lignes de la table. La requête affiche une feuille de données possédant une seule colonne (puisque nous l'avons définie ainsi), et une seule ligne (puisque la fonction fournit une valeur unique).
Les figures ci-dessous représentent la requête (à gauche) et la feuille de données résultante (à droite).
Comptage des lignes (requête) Comptage des lignes (résultat)
Cette méthode compte effectivement les lignes d'une table, même si elles sont toutes vides. Vous pouvez faire l'expérience en effaçant tout ce que contient la table "Résultats" (après en avoir gardé copie).
Remarque : si nous remplaçons l'astérisque par le nom de l'un des champs de la table "Résultats" (mis entre crochets pour respecter la syntaxe), nous obtenons le résultat du paragraphe précédent, c'est à dire le comptage des enregistrements (non vides) du champ considéré.
6 - Conclusion
                  Comme vous pouvez le constater, cette page est pleine de ressources. Elle vous montre comment :          
            compter les enregistrements regroupés ;
  compter les doublons ;
  éliminer les doublons ;
  compter les enregistrements (non vides) dans une colonne ;
  compter les lignes dans une table.
Le comptage des doublons, et leur élimination, sont des techniques importantes à connaître, car elles sont souvent utilisées pour la maintenance des bases de données et l'interrogation de leur contenu.
Chapitre précédent Plan du tutoriel Liste des tutoriels Chapitre suivant
Accueil | Technique | Liens | Actualités | Formation | Emploi | Forums | Base
Copyright © CERIG/EFPG 1996-2003
Réalisation et mise en page : J.C. Sohm