Retour à la liste des articles Articles
8 minutes de lecture

Qu'est-ce que GROUP BY en SQL ?

GROUP BY est une excellente fonctionnalité SQL qui vous permet d'effectuer des calculs puissants sur des données groupées. Voulez-vous apprendre à tirer des enseignements puissants de vos données ? Vous voulez savoir ce que fait GROUP BY et quand vous devez l'utiliser ? Si votre réponse est oui, poursuivez votre lecture. Dans cet article, vous apprendrez exactement cela.

Pourquoi vous avez besoin de GROUP BY

Dans le monde numérisé d'aujourd'hui - quel que soit votre secteur d'activité - les tables de bases de données sont généralement énormes, avec des millions d'enregistrements. Pour se familiariser avec de telles données, il ne suffit pas de savoir comment utiliser les instructions SELECT. L'une des premières choses que vous devez apprendre lorsque vous traitez des quantités massives de données est comment utiliser la construction SQL GROUP BY. Cette puissante fonctionnalité vous permet de regrouper vos données selon un attribut commun, après quoi vous pouvez effectuer des calculs sur chacun de ces groupes séparément.

Quand vous avez besoin de GROUP BY

Vous pouvez donc utiliser GROUP BY lorsque vous souhaitez regrouper des enregistrements, puis effectuer des calculs sur chaque groupe et afficher les résultats. La question suivante est de savoir quand - dans quelles situations ou scénarios commerciaux - il est judicieux d'utiliser la clause GROUP BY?

Eh bien, SQL GROUP BY est largement utilisé dans différents secteurs et domaines d'activité. Par exemple :

  • Dans le domaine des ventes, vous pouvez utiliser GROUP BY pour calculer le nombre total de produits vendus au niveau d'un produit ou d'une catégorie.
  • Les RH peuvent vous demander de calculer le salaire moyen pour chaque département de l'entreprise à l'aide d'une table qui contient des informations sur les employés, leurs salaires et leurs départements.
  • Dans le secteur bancaire, vous pouvez calculer le nombre total de clients actifs par rapport aux clients non actifs en utilisant la construction GROUP BY.
  • Dans le domaine de la santé publique ou de la médecine, vous pouvez calculer le nombre total de cas confirmés de COVID pour chaque pays et chaque province avec GROUP BY.

Une chose est sûre : il existe un grand nombre de scénarios commerciaux différents pour lesquels GROUP BY est utile. Quel que soit l'endroit où vous travaillez en tant qu'analyste SQL, vous vous retrouverez certainement à utiliser GROUP BY tous les jours.

Il est maintenant temps d'apprendre à utiliser la clause GROUP BY. Commençons par sa syntaxe.

Syntaxe GROUP BY

La syntaxe de GROUP BY est plus facile à expliquer à l'aide d'un exemple. movies ci-dessous :

idtitledirectorproduction_year
1PsychoAlfred Hitchcock1960
3Sweet and LowdownWoody Allen1993
4Talk to HerPedro Almodovar2002
2Midnight in ParisWoody Allen2011
8The Skin I Live InPedro Almodovar2011

Comme vous pouvez le voir, chaque film est représenté par un enregistrement dans la table. Pour chaque film, le tableau contient des informations sur son réalisateur et son année de production.

Certains films sont réalisés par le même réalisateur. Si vous souhaitez afficher le nombre de films réalisés par chaque réalisateur, vous pouvez utiliser GROUP BY comme ceci :

SELECT director,
      count(*) AS number_of_movies
FROM movies
GROUP BY director;

Voici une brève explication de ce qui se passe dans cette requête :

  • Cette instruction SQL regroupe les enregistrements par la colonne director. Elle est indiquée par le mot-clé GROUP BY suivi du nom de la colonne par laquelle les enregistrements sont regroupés (dans notre cas, la colonne est director).
  • La colonne de regroupement doit également être mentionnée après le mot-clé SELECT (c'est-à-dire à l'intérieur de SELECT). Cela signifie que les directeurs seront affichés sur l'écran de sortie et que des calculs spécifiques seront effectués pour chaque groupe (pour chaque directeur) séparément.
  • Il y a trois groupes d'enregistrements car nous avons trois réalisateurs différents dans notre table de films (Alfred Hitchcock, Woody Allen et Pedro Almodovar).
  • La fonction COUNT(*) est exécutée sur chaque groupe. Elle compte toutes les lignes à l'intérieur de chaque groupe.

Le tableau résultant nous montre le nombre total de films pour chaque réalisateur :

directornumber_of_movies
Alfred Hitchcock1
Woody Allen2
Pedro Almodovar2

Remarquez comment les lignes de résultats sont réduites... chaque groupe est affiché sur une seule ligne. C'est pourquoi le tableau résultant contient trois lignes au lieu de cinq (le nombre de lignes dans le tableau) ; il y a trois groupes.

Comment fonctionne GROUP BY

Vous savez maintenant ce que le moteur SQL affichera comme résultat de notre GROUP BY. Mais comment fonctionne réellement GROUP BY? Regardez l'animation ci-dessous :

GROUPE PAR

Comme vous pouvez le voir dans cette animation, le moteur SQL regroupe d'abord les lignes par une clé définie - dans notre cas, la colonne réalisateur. Les films d'Alfred Hitchcock sont dans un groupe, les films de Woody Allen dans un autre et Pedro Almodovar dans un troisième. Après le regroupement, un comptage est effectué sur chaque groupe séparément et le résultat est affiché. Dans ce cas, la fonction COUNT() compte le nombre total de films pour chaque réalisateur.

Vous avez peut-être déjà rencontré la clause SQL ORDER BY et vous n'êtes pas sûr de la différence entre le classement et le regroupement des lignes. Si c'est le cas, je vous suggère de jeter un coup d'œil à la rubrique Différence entre GROUP BY et ORDER BY en quelques mots.

Calculs multiples dans un GROUP BY

Dans notre exemple précédent, nous avons compté les enregistrements (films) de chaque réalisateur séparément. Il existe de nombreuses autres statistiques que vous pouvez utiliser dans une clause GROUP BY. Par exemple, au lieu de compter les lignes individuelles, vous pouvez calculer la valeur moyenne pour chaque groupe à l'aide de la fonction AVG() ou vous pouvez calculer les totaux à l'aide de SUM(). Vous pouvez également utiliser les fonctions MIN() ou MAX() pour récupérer les valeurs les plus petites (min) ou les plus grandes (max) de chaque groupe. Nous appelons ces fonctions des fonctions d'agrégation car elles effectuent des calculs sur des groupes de valeurs et renvoient une seule valeur comme résultat.

Prenons un exemple rapide d'utilisation de GROUP BY avec des fonctions d'agrégation. Dans cette requête, vous pouvez afficher le film le plus ancien/le plus récent réalisé par chaque réalisateur :

SELECT director,
      min(production_year) AS the_earliest_film_made,
      max(production_year) AS the_latest_film_made
FROM movies 
GROUP BY director;

Ici, nous utilisons les fonctions MIN() et MAX() pour récupérer les informations souhaitées. Nous avons utilisé deux fonctions ? car nous récupérons deux statistiques différentes pour chaque groupe d'enregistrements. C'est une autre bonne chose à savoir sur GROUP BY - vous pouvez effectuer différents calculs dans une seule instruction SQL.

Voici le résultat :

directorthe_earliest_film_madethe_latest_film_made
Alfred Hitchcock19601960
Woody Allen19932011
Pedro Almodovar20022011

Remarquez que les valeurs minimum et maximum d'Alfred Hitchcock sont égales. C'est parce qu'il n'y a qu'un seul de ses films dans notre tableau ; ainsi, MIN() et MAX() renvoient la même valeur. Les autres réalisateurs du tableau movies ont plus de films dans leur portefeuille, ils ont donc des valeurs différentes.

Nous n'avons pas la place d'approfondir les fonctions d'agrégation ici ; vous pouvez trouver une explication détaillée sur les fonctions d'agrégation et leur utilisation avec GROUP BY dans notre article A Beginner's Guide to SQL Aggregate Functions.

GROUP BY avec plusieurs colonnes

Dans l'exemple précédent, nous avons vu qu'il est possible d'effectuer plus d'un calcul dans une seule instruction GROUP BY. De même, il est également possible de regrouper des lignes en fonction de plusieurs colonnes. Cela signifie en fait que chaque groupe spécifique dans le résultat est défini par plus d'une valeur de colonne.

Supposons que notre table movies possède également un attribut de genre pour chacun des films :

idtitledirectorproduction_yeargenre
1PsychoAlfred Hitchcock1960thriller
3Sweet and LowdownWoody Allen1993comedy/drama
4Talk to HerPedro Almodovar2002romance/drama
2Midnight in ParisWoody Allen2011comedy/drama
8The Skin I Live InPedro Almodovar2011thriller/drama

Au lieu de regrouper les lignes par réalisateur, nous pouvons les regrouper par réalisateur et par genre pour calculer le nombre de films de chaque réalisateur dans chaque genre :

SELECT director,
      genre,
      count(*) as number_of_movies 
FROM movies
GROUP BY director, genre;

Voici une brève explication de la requête ci-dessus :

  • À l'intérieur du GROUP BY, nous avons deux colonnes : réalisateur et genre. Ces deux colonnes sont également définies après le SELECT. Rappelez-vous que vous devez énumérer toutes les colonnes du GROUP BY à l'intérieur du SELECT.
  • Dans cet exemple, chaque groupe est défini par un réalisateur et un genre. Cela signifie que nous distinguerons les films à suspense/drame de Pedro Almodovar comme un groupe et ses films à l'eau de rose/drame comme un autre groupe. Ainsi, nous aurons quatre lignes (et non trois) dans le résultat :
directorgenrenumber_of_movies
Alfred Hitchcockthriller1
Woody Allencomedy/drama2
Pedro Almodovarromance/drama1
Pedro Almodovarthriller/drama1

th style="background-color:#37c591"

Pas mal, non ? À présent, vous avez probablement compris que GROUP BY est une fonctionnalité SQL très puissante et efficace. Si vous souhaitez voir d'autres exemples de GROUP BY, je vous suggère l'article Exemples de GROUP BY SQL. Vous y trouverez 5 exemples supplémentaires qui vous aideront à maîtriser GROUP BY.

Approfondissez votre connaissance de SQL GROUP BY

Nous espérons que ces exemples vous ont montré à quel point il est facile d'écrire une clause SQL GROUP BY. Cette clause est très utile dans les activités quotidiennes, car elle vous permet d'obtenir de puissants renseignements sur les données en quelques lignes de code seulement.

Il est maintenant temps pour vous de vous exercer. Je vous suggère de commencer par le cours SQL pour les débutants sur LearnSQL.fr. Si vous avez déjà parcouru les principes de base et que vous souhaitez affiner vos compétences, essayez le cours Exercices Pratiques de SQL. N'oubliez pas que seule la pratique vous permettra d'améliorer vos connaissances et d'accéder au titre d'expert SQL.