Retour à la liste des articles Articles
6 minutes de lecture

Utilisation de GROUP BY en SQL

Maintenant que vous connaissez les commandes de base de SQL, renforcez vos requêtes avec la clause GROUP BY et les fonctions d'agrégation.

GROUP BY La clause GROUP BY est une clause SQL qui organise les données en groupes sur la base d'une (ou plusieurs) valeur(s) commune(s). Elle est largement utilisée pour obtenir des informations récapitulatives sur de grands ensembles de données et pour calculer des statistiques agrégées de base.

Une fois que vous avez maîtrisé les commandes SQL de base telles que SELECT, WHERE et JOIN, la maîtrise de la clause GROUP BY peut vous aider à mettre en œuvre vos connaissances SQL dans des scénarios de Business Intelligence réels.

La clause SQL GROUP BY est le plus souvent utilisée en combinaison avec des fonctions d'agrégation telles que COUNT(), MAX(), MIN(), SUM() et AVG(). Elle regroupe l'ensemble des résultats selon une ou plusieurs colonnes, créant ainsi des lignes récapitulatives pour chaque groupe. Ces groupes sont généralement basés sur des valeurs catégoriques plutôt que continues.

Par exemple, si vous utilisez un jeu de données de clients internationaux pour votre entreprise, vous pouvez utiliser la clause GROUP BY pour résumer des informations telles que le "nombre total de clients par pays" ou le "chiffre d'affaires total par client".

Syntaxe GROUP BY

Maintenant que nous savons ce qu'est la clause GROUP BY, examinons la syntaxe d'une requête de base GROUP BY.

SELECT column_name(s)
FROM table_name
WHERE [condition]
GROUP BY column_name1, column_name2
HAVING [condition]
ORDER BY column_name

Voici :

  • SELECT est la requête SQL standard SELECT.
  • GROUP BY column_name1 effectue le regroupement sur la base des valeurs de column_name1.
  • column_name2 est utilisé lorsque le regroupement est effectué sur plus d'une colonne ; vous pouvez regrouper sur un nombre quelconque de colonnes. Cette option est facultative.
  • HAVING [condition] et WHERE [condition] sont également facultatifs ; tous deux sont utilisés pour restreindre les lignes affectées par la clause GROUP BY. La principale différence est que WHERE filtre les lignes avant le regroupement et que HAVING filtre les groupes eux-mêmes une fois qu'ils sont formés. Important : WHERE doit précéder la clause GROUP BY et HAVING doit la suivre.
  • ORDER BY [condition] est utilisée après GROUP BY pour trier ou ordonner les données en fonction d'un critère donné column_name.

À première vue, GROUP BY et ORDER BY semblent faire la même chose - trier les données. Mais c'est là que s'arrêtent leurs similitudes. Comme son nom l'indique, ORDER BY ordonne simplement l'ensemble des données dans un ordre défini, tandis que GROUP BY regroupe les données sous forme de sortie agrégée. Notre article précédent, La différence entre GROUP BY et ORDER BY en termes simples, explique cela plus en détail ; consultez-le si vous avez besoin d'un rafraîchissement.

Voyons maintenant comment la clause GROUP BY fonctionne avec des requêtes réelles.

GROUPER PAR une seule colonne

Pour mieux comprendre l'effet de la clause GROUP BY, exécutons une requête simple sur la table Orders qui a enregistré 196 commandes individuelles. Ci-dessous, vous pouvez voir les cinq premières entrées de la table :

OrderIDCustomerIDEmployeeIDOrderDateShipperID
102489051996-07-043
102498161996-07-051
102503441996-07-082
102518431996-07-081
102527641996-07-092

A l'aide de la table Orders nous allons découvrir combien de clients uniques ont passé une commande. Voici la requête :

SELECT CustomerID 
FROM Orders
GROUP BY CustomerID

RÉSULTAT

Number of Records: 74
CustomerID
2
3
4
5
7

Voici un exemple d'une simple clause GROUP BY sur une seule colonne (CustomerID) ; le résultat place toutes les lignes ayant la même valeur pour la colonne CustomerID dans le même groupe. Il renvoie également le nombre de clients uniques qui ont passé une commande (74). Essentiellement, une clause GROUP BY sans fonction d'agrégation se comporte de la même manière qu'une clause DISTINCT: elle trouve les valeurs uniques d'une colonne.

Le regroupement peut également être effectué sur plusieurs colonnes. Cette fonction est particulièrement utile lorsqu'elle est utilisée avec une ou plusieurs fonctions d'agrégation.

Regroupement avec les fonctions d'agrégation

L'application pratique de la commande SQL GROUP BY consiste à résumer des paramètres statistiques pour des groupes de données ; ceci est généralement réalisé à l'aide de fonctions d'agrégation. Nous allons maintenant explorer quelques exemples, en utilisant les tables Orders et la table OrderDetails dont un exemple est présenté ci-dessous :

OrderDetailIDOrderIDProductIDQuantity
1102481112
2102484210
310248725
410249149
5102495140

MAX(), MIN(), AVG(), SUM()

GROUP BY est parfait pour résumer les paramètres statistiques de catégories individuelles dans votre ensemble de données. Par exemple, essayons de trouver la quantité maximale, minimale et moyenne de chaque ProductID par commande et le nombre total de chaque produit commandé. Nous utiliserons le tableau OrderDetails et classer les résultats par ordre décroissant de la somme des quantités commandées pour chaque produit. Cela nous éclairera sur les ProductIDs les plus populaires. Voici la requête :

SELECT ProductID, MAX(Quantity), Min(Quantity), AVG(Quantity), SUM (Quantity)
FROM OrderDetails
GROUP BY ProductID
Order By SUM(Quantity) DESC

RÉSULTAT

Number of Records: 77
ProductIDMAX(Quantity)Min(Quantity)AVG(Quantity)SUM (Quantity)
3170432.714285714285715458
6080635.833333333333336430
35100441369
5970624.714285714285715346
260731341

Le tableau ci-dessous explique comment certaines de ces valeurs agrégées sont calculées pour les valeurs 2 et 31 de ProductID. La clause GROUP BY regroupe d'abord les lignes de ProductID 2, puis calcule les valeurs AVG() et MAX() pour l'ensemble du groupe. Elle fait de même pour chaque ProductID pour chacune des fonctions agrégées de la requête.

ProductIDQuantityAverage (?Quantity/# of ProductID)Max (Quantity)
2603160
250
245
240
235
…………
317032.71470
3160
3156
3142
3140
…………

Comme vous le voyez, la commande GROUP BY est un outil extrêmement utile pour trouver des résumés statistiques pour toute classe de variables.

GROUPER PAR plusieurs colonnes avec COUNT()

Comme nous l'avons mentionné précédemment, vous pouvez utiliser plusieurs colonnes dans la commande GROUP BY. En d'autres termes, vous placez toutes les lignes ayant les mêmes valeurs dans column_name1 et column_name2 dans un seul groupe.

Prenons un exemple où nous voulons compter le nombre de fois où chaque employé a utilisé chaque service d'expédition. Une fois encore, nous utiliserons la table Orders table.

SELECT EmployeeID, ShipperID, COUNT(*)
FROM Orders
Group BY EmployeeID, ShipperID
Order BY ShipperID, Count(*) DESC

RÉSULTAT

Number of Records: 26
EmployeeIDShipperIDCOUNT(*)
4112
118
217
317
617
…….…….…….

Cette requête pourrait être utilisée, par exemple, pour obtenir des commentaires sur le service client des expéditeurs de la part des employés qui ont utilisé ce service. Comme nous pouvons le voir ci-dessus, il existe 26 paires d'interactions uniques entre les employés et les expéditeurs !

Comment le regroupement par deux colonnes fonctionne-t-il en coulisses ? Les lignes ayant les mêmes adresses EmployeeID et ShipperID sont regroupées en un seul groupe. La taille de ces groupes (c'est-à-dire le nombre d'enregistrements dans le groupe) est calculée, comme vous pouvez le voir ci-dessous :

EmployeeIDShipperIDCount
11
11
1112
11
11
………….
41
41
418
41
41
………….

La commande GROUP BY est également un outil puissant qui peut être combiné avec les clauses SQL HAVING et WHERE pour définir des conditions supplémentaires pour les résultats renvoyés.

Gardez à l'esprit qu'il y a certaines subtilités lorsque GROUP BY est utilisé avec des colonnes qui ont des NULL valeurs. Reportez-vous à notre article précédent sur les erreurs courantes de GROUP BY pour plus de détails.

Maîtriser la commande SQL GROUP BY

Inutile de dire que seule la pratique vous permettra de maîtriser cette commande ! Il est préférable de s'exercer sur des ensembles de données du monde réel, que vous pouvez visualiser et relier aux besoins de l'entreprise. Le cours SQL pour les débutants cours comprend un ensemble complet d'exercices interactifs. Vous apprendrez à regrouper des lignes et à calculer des statistiques avec des fonctions d'agrégation sur des ensembles de données pratiques. Essayez-le, et bonne chance !