Les requêtes « regroupement » permettent de regrouper tous les enregistrements (lignes) d’une même table (ou d’une requête), dont le contenu de certains champs est commun, en un seul enregistrement.
Ainsi, dans le cas d’un état de stock de marchandises, la requête ci-après regroupe tous les enregistrements dont le code article (champ Référence) est identique en un seul et additionne les quantités :
SELECT [Stock N].Référence, [Stock N].Désignation, Sum([Stock N].Quantité) AS SommeDeQuantité FROM [Stock N] GROUP BY [Stock N].Référence, [Stock N].Désignation;
Les champs qui servent de critère de regroupement sont mentionnés dans la clause GROUP BY (dans notre exemple, le regroupement est opéré sur les champs Références et Désignation). Les champs qui ne servent pas de critère de regroupement font l’objet d’un calcul à l’aide d’une fonction d’agrégation :
- d’une addition (SUM()) comme dans l’exemple proposé,
- d’une moyenne arithmétique (AVG()),
- d’un dénombrement (COUNT()),
- d’un relevé des valeurs minimales (MIN()) et maximales (MAX())…
Dans cet exemple, le champ Quantité est sommé.
Table d’origine :
Référence | Désignation | Quantité |
150 | PALETTE | 181 |
300 | CHEVRON 6X8 | 1400 |
300 | CHEVROB 6X8 | 208 |
512 | ELINGUES DIAM 12 MM(F.UT: 500KG) | 12 |
516 | ELINGUES DIAM 16 MM(F.UT:1000KG) | 48 |
520 | ELINGUES DIAM 20 MM(F.UT:1600KG) | 64 |
524 | ELINGUES DIAM 24 MM | 15 |
Résultat de la requête :
Référence | Désignation | SommeDeQuantité |
150 | PALETTE | 181 |
300 | CHEVRON 6X8 | 1608 |
512 | ELINGUES DIAM 12 MM(F.UT: 500KG) | 12 |
516 | ELINGUES DIAM 16 MM(F.UT:1000KG) | 48 |
520 | ELINGUES DIAM 20 MM(F.UT:1600KG) | 64 |
524 | ELINGUES DIAM 24 MM | 15 |
Une clause HAVING positionnée à la fin de la requête permettra d’ajouter un critère (à l’aide d’opérateurs de comparaison) afin de restreindre le nombre de lignes compris dans le résultat de la requête. Par exemple, pour ne retenir que les résultats dont la quantité est supérieure à 1 000 :
HAVING (((Sum([Stock N].Quantité))>1000))
Le texte de la requête incluant la clause HAVING prend la forme suivante :
SELECT [Stock N].Référence, [Stock N].Désignation, Sum([Stock N].Quantité) AS SommeDeQuantité FROM [Stock N] GROUP BY [Stock N].Référence, [Stock N].Désignation HAVING (((Sum([Stock N].Quantité))>1000));
Résultat de la requête avec la clause HAVING :
Référence | Désignation | SommeDeQuantité |
300 | CHEVRON 6X8 | 1608 |
Une requête « regroupement » sera utile par exemple pour obtenir une balance à partir des journaux d’écritures comptables.
Le résultat de la requête peut faire l’objet d’un tri avec une clause ORDER BY.
Approfondir le sujet : Maîtriser le langage de requête SQL / Analyse de données
Derniers articles parBenoît RIVIERE (voir tous)
- Open Data : quoi de neuf ? - lundi 2 septembre 2024
- Auditsi cité dans le podcast Marketing du cabinet comptable - mercredi 21 août 2024
- IA générative : aide à la rédaction de prompts efficaces - samedi 17 août 2024
- S’initier à l’analyse de données et l’automatisation des tâches - dimanche 11 août 2024
- Créez votre plateforme de collecte d’informations juridiques et financières personnalisée ! - lundi 5 août 2024
Pingback: SQL : les requêtes UNION – Audit & Systèmes d'Information