|
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. |
|
|
|
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). |
|
|
 |
|
|
|
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). |
|
|
 |
|
|
|
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. |
|
|
 |
|
|
|
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. |
|
|

 |
|
|
|
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). |
|
|
 |
|
|
|
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é. |
|
|