SQL : les requêtes regroupement

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

Share Button
The following two tabs change content below.
Après seize années passées en cabinet d’expertise-comptable et de commissariat aux comptes (où j’ai exercé comme expert-comptable et chef de mission audit), j’ai pris le poste de directeur comptable d’un groupe de distribution automobile en novembre 2014. Au cours de ma carrière, j’ai acquis une expérience significative en audit et en exploitation des systèmes d’information (analyse de données, automatisation des tâches, programmation informatique) au service de la production des comptes annuels et consolidés. C’est cette expérience personnelle et ma passion pour l’informatique que je partage sur ce blog. Mon CV / Réalisations personnelles et projets informatiques / Ma collection / Me contacter

Un commentaire

  1. Pingback: SQL : les requêtes UNION – Audit & Systèmes d'Information

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.