Retour à la liste des articles Articles
6 minutes de lecture

Explication de GROUP BY en SQL

L'instruction SQL GROUP BY est facile à utiliser, mais elle peut être difficile à maîtriser. Découvrez ce que vous pouvez faire avec GROUP BY, comment elle fonctionne et comment l'utiliser avec les fonctions d'agrégation.

GROUP BY est l'un des outils SQL de base. Cependant, il peut être difficile pour les débutants de comprendre le fonctionnement de GROUP BY et la façon dont il est utilisé pour calculer des statistiques avec différentes fonctions d'agrégation. Dans cet article, je vais utiliser plusieurs exemples pour montrer exactement comment GROUP BY organise les lignes et comment les fonctions d'agrégation peuvent être utilisées pour calculer des statistiques sur une ou plusieurs colonnes.

Alors, commençons.

Comment fonctionne GROUP BY en SQL ?

GROUP BY est un outil indispensable pour tout analyste de données travaillant avec SQL. Si vous souhaitez organiser vos données en groupes et calculer des statistiques agrégées pour ces groupes, la clause GROUP BY est ce qu'il vous faut.

Alors, que fait GROUP BY? En gros, elle regroupe les lignes ayant la même valeur dans un groupe ou un seau. Voyons comment cela fonctionne.

Supposons que nous gérions une librairie et que nous voulions savoir combien de livres de différents genres nous avons en stock. Notre base de données comprend une table qui répertorie les titres des livres, leur genre et la quantité en stock.

La visualisation ci-dessous montre comment la clause GROUP BY crée des groupes à partir des données de la table. Nous voulons connaître la quantité totale de livres pour chaque genre ; ainsi, GROUP BY regroupe les livres du même genre et additionne les quantités correspondantes. Cela crée un tableau de résultats qui répertorie les genres et leur quantité totale de livres dans notre stock.

GROUP BY somme

Pour une introduction plus détaillée de la rubrique GROUP BY, consultez ce tutoriel vidéo de notre série "We Learn SQL".

GROUP BY en action

Il est maintenant temps de donner des exemples plus spécifiques de requêtes SQL avec une clause GROUP BY. Nous allons utiliser la table books qui stocke l'ID, le titre, l'auteur, le genre, la langue, le prix et la quantité de chaque roman que nous stockons.

idtitleauthorgenrelangpriceqty
1Les Trois MousquetairesAlexandre Dumasadventurefr11.904
2A Game of ThronesGeorge R.R. Martinfantasyen8.495
3Pride and PrejudiceJane Austenromanceen9.992
4Vampire AcademyRichelle Meadfantasyen7.993
5IvanhoeWalter Scottadventureen9.993
6ArmanceStendhalromancefr5.881

Pour calculer le nombre total de livres de chaque genre, nous allons utiliser la requête suivante :

SELECT genre, SUM(qty) AS total
FROM books
GROUP BY genre;

Ici, dans la clause GROUP BY, nous sélectionnons nos lignes à regrouper par la colonne genre. Ensuite, la fonction SUM(qty) de l'instruction SELECT additionne les valeurs de qté dans chaque groupe (c'est-à-dire chaque genre de livre), le résultat étant affiché dans le champ correspondant total:

genretotal
adventure7
fantasy8
romance3

Utilisation des fonctions d'agrégation avec GROUP BY

GROUP BY met les lignes ayant la même valeur dans un seul et même bac. Nous souhaitons généralement calculer certaines statistiques pour ce groupe de lignes, comme la valeur moyenne ou la quantité totale. À cette fin, SQL fournit des fonctions d'agrégation qui combinent les valeurs d'une certaine colonne en une seule valeur pour le groupe respectif.

Jusqu'à présent, nous avons uniquement utilisé SUM() comme fonction d'agrégation pour regrouper les titres de livres en stock. Cependant, ce n'est pas la seule fonction d'agrégation que vous pouvez utiliser avec GROUP BY. SQL propose également :

  • COUNT() de calculer le nombre de lignes dans chaque groupe.
  • AVG() de trouver la valeur moyenne pour chaque groupe.
  • MIN() de retourner la valeur minimale dans chaque groupe.
  • MAX() de renvoyer la valeur maximale de chaque groupe.

Voyons comment la fonction AVG() fonctionne avec GROUP BY. Cette fois, nous voulons calculer le prix moyen des livres de chaque genre. Nous allons commencer par visualiser le résultat que nous voulons obtenir.

GROUP BY avg

Nous regroupons à nouveau nos livres par genre, mais cette fois, nous voulons calculer le prix moyen des livres dans chaque genre. La requête SQL pour cela se présente comme suit :

SELECT genre, AVG(price) AS avg_price
FROM books
GROUP BY genre;

Cette requête crée un tableau avec deux colonnes (genre et avg_price), où le prix moyen est calculé en faisant la moyenne des valeurs de prix pour les livres de chaque genre :

genreavg_price
adventure10.945
fantasy8.24
romance7.935

En fait, nous ne sommes pas limités à l'utilisation d'une seule fonction d'agrégation avec une clause GROUP BY. Ajoutons donc les informations sur le prix minimum et maximum des livres de chaque genre :

SELECT genre, 
MIN(price) AS min_price, 
     AVG(price) AS avg_price, 
MAX(price) AS max_price
FROM books
GROUP BY genre;

Le jeu de résultats comprend maintenant quatre colonnes : genre, min_price, avg_price, et max_price.

genremin_priceavg_pricemax_price
adventure9.9910.94511.90
fantasy7.998.248.49
romance5.887.9359.99

Notez que lorsque vous utilisez GROUP BY , l'instruction SELECT ne peut inclure que les champs qui sont soit utilisés dans la fonction d'agrégation, soit répertoriés dans la clause GROUP BY . Par exemple, dans notre cas, nous ne pouvons pas ajouter title ou l'auteur à notre ensemble de résultats. Cela n'aurait aucun sens, car chaque ligne de notre table de sortie contient des informations sur plusieurs livres avec des titres et des auteurs différents.

Pour en savoir plus sur les autres problèmes que vous pouvez rencontrer lorsque vous utilisez GROUP BY en SQL, consultez cet article qui traite des erreurs GROUP BY courantes et de la manière de les éviter.

Grouper par deux colonnes

En SQL, vous pouvez également regrouper vos données en utilisant plusieurs colonnes. Par exemple, disons que nous voulons regrouper nos livres non seulement par genre mais aussi par langue. Et nous voulons calculer le nombre de titres de livres dans chaque catégorie.

Conseil : la fonction d'agrégation COUNT() nous aidera à calculer le nombre de titres de livres (c'est-à-dire de lignes).

Pour calculer le nombre de titres de livres par genre et par langue, nous utiliserons la requête suivante :

SELECT genre, lang, count(title) AS titles
FROM books
GROUP BY genre, lang;

Nous obtiendrons un tableau de sortie avec trois colonnes : genre, la langue (lang), et le nombre de titles dans cette catégorie :

genrelangtitles
adventureen1
adventurefr1
fantasyen2
romanceen1
romancefr1

Ainsi, dans notre jeu de données d'exemple, nous avons :

  • Un titre de livre en langue anglaisedans le genre aventure(Ivanhoe).
  • Un titre de livre en français dans le genre aventure(Les Trois Mousquetaires).
  • Deux titres de livres en anglais dans le genre fantastique(A Game of Thrones et Vampire Academy).
  • Un livre de langue anglaise dans le domaine de la romance(Pride and Prejudice).
  • Un titre de livre de langue française dans le genre romance(Armance).

Comme vous pouvez le constater, il n'y a pas de livres de fantasy en français dans notre ensemble de données.

Pour d'autres exemples d'applications GROUP BY, consultez cet article montrant comment GROUP BY peut être utilisé dans des scénarios commerciaux réalistes.

Prêt à utiliser GROUP BY en SQL ?

Vous avez maintenant une meilleure compréhension de la façon dont GROUP BY peut vous aider à organiser et à analyser vos données. Cependant, si vous voulez manier GROUP BY comme un pro, vous avez besoin de beaucoup de pratique.

LearnSQL.fr propose un SQL pour les débutants qui comprend 129 exercices interactifs couvrant l'agrégation, le regroupement, les JOIN, les sous-requêtes, etc. Ce cours est l'occasion idéale d'apprendre à regrouper des lignes et à calculer des statistiques à l'aide de fonctions d'agrégation.

Bon apprentissage !