Remplissez ce court formulaire pour candidater à la formation de votre choix. Notre équipe pédagogique vous contactera rapidement pour échanger sur votre parcours et vous accompagner dans la suite de votre inscription.
Dans notre guide sur les jointures SQL, on a appris à relier deux tables pour voir, ligne par ligne, quel client a commandé quel produit. Très bien. Mais si votre patron vous demande « combien chaque client a-t-il dépensé au total ? », lister toutes les lignes une par une ne suffit plus. Il faut résumer les données. C'est exactement le travail de GROUP BY.
GROUP BY est la commande qui transforme des lignes brutes en chiffres qui parlent : des totaux, des moyennes, des comptages, groupés par catégorie. C'est ce qui distingue un tableau de données d'un vrai résultat d'analyse. Sans lui, impossible de répondre à des questions comme « quel est le produit le plus vendu » ou « quel mois a généré le plus de chiffre d'affaires ».
Je forme des Data Analysts chez DataSuits, organisme de formation Qualiopi certifié par l'Université Paris 1 Panthéon-Sorbonne, et GROUP BY est, avec les jointures, l'un des deux concepts qui font vraiment passer un débutant en mode analyste. On reprend nos tables clients et commandes, et on va apprendre à les résumer, étape par étape.
GROUP BY regroupe les lignes d'une table qui partagent une même valeur (un client, un mois, une catégorie) pour appliquer ensuite un calcul sur chaque groupe : compter, additionner, faire une moyenne. Combiné à des fonctions comme COUNT, SUM ou AVG, et filtré avec HAVING, c'est l'outil qui transforme une liste de lignes en véritables statistiques exploitables.
Reprenons notre exemple. Après une jointure, on obtient une ligne par commande : Camille-Clavier, Camille-Souris, Yanis-Écran. C'est précis, mais ça ne répond pas directement à « combien de commandes Camille a-t-elle passées ? ». Pour le savoir, il faut regrouper toutes les lignes de Camille ensemble, puis les compter.
C'est exactement ce que fait GROUP BY : il prend une colonne (ici, le nom du client), rassemble toutes les lignes qui ont la même valeur dans cette colonne, et forme des paquets. Un paquet pour Camille, un paquet pour Yanis, un paquet pour Inès. Ensuite, on applique un calcul sur chaque paquet : les compter, les additionner, en faire la moyenne.
L'image que je donne en cours : imaginez une pile de tickets de caisse éparpillés sur une table. GROUP BY, c'est trier ces tickets en petits tas, un tas par client. Une fois les tas formés, vous pouvez répondre à n'importe quelle question sur chaque tas : combien de tickets dans ce tas, quel est le total de ce tas, quel est le ticket le plus élevé. C'est ce passage du détail à la synthèse qui fait tout l'intérêt de GROUP BY.
GROUP BY ne travaille jamais seul : il a besoin d'une fonction d'agrégation pour dire quoi calculer sur chaque groupe. Il en existe cinq, et elles couvrent presque tous les besoins d'un Data Analyst. Voici la liste, avec ce que chacune fait concrètement.
Compte le nombre de lignes dans chaque groupe. « Combien de commandes par client ? »
Additionne les valeurs d'une colonne numérique. « Le total dépensé par client ? »
Calcule la moyenne d'une colonne numérique. « Le panier moyen par client ? »
Trouve la plus petite valeur du groupe. « La commande la moins chère de chaque client ? »
Trouve la plus grande valeur du groupe. « La commande la plus chère de chaque client ? »
Retenez cette logique simple : COUNT répond à « combien », SUM à « quel total », AVG à « en moyenne », et MIN/MAX aux extrêmes. Une fois ces cinq verbes en tête, vous savez déjà formuler 80 % des requêtes d'analyse dont vous aurez besoin en entreprise.
Passons à la pratique. On enrichit un peu notre table commandes avec un prix, pour pouvoir calculer des totaux :
Première question : combien de commandes chaque client a-t-il passées ? On regroupe par client_id, et on compte les lignes de chaque groupe avec COUNT :
SELECT client_id, COUNT(*) AS nb_commandes FROM commandes GROUP BY client_id;
SQL a formé deux paquets (client 1 et client 2) et a compté les lignes de chacun. Deuxième question, un peu plus utile pour le business : combien chaque client a-t-il dépensé au total ? On remplace juste COUNT par SUM sur la colonne prix :
SELECT client_id, SUM(prix) AS total_depense FROM commandes GROUP BY client_id;
Le client 1 (45 + 20) a dépensé 65, le client 2 (180 + 45) a dépensé 225. En combinant cette requête avec une jointure sur la table clients, vous obtenez directement le total dépensé par nom de client, prêt à présenter dans un rapport. C'est exactement le genre de requête qu'on écrit tous les jours en entreprise.
Imaginons qu'on ne veuille voir que les clients ayant dépensé plus de 100. Le réflexe naturel serait d'ajouter un WHERE. Mauvaise idée : WHERE ne peut pas filtrer sur un résultat de SUM ou COUNT, parce qu'il agit avant que les groupes soient formés. C'est là qu'intervient HAVING, le filtre qui s'applique après le regroupement.
SELECT client_id, SUM(prix) AS total_depense FROM commandes GROUP BY client_id HAVING SUM(prix) > 100;
Le client 1, avec ses 65 de total, a été écarté par le HAVING. C'est la règle la plus importante à retenir sur ce sujet : WHERE filtre les lignes avant le regroupement (par exemple, ne garder que les commandes de 2026), tandis que HAVING filtre les groupes après le calcul (par exemple, ne garder que les clients ayant dépensé plus de 100). Les deux peuvent même cohabiter dans la même requête, chacun à sa place.
Une requête avec GROUP BY et HAVING doit respecter un ordre précis. Le non-respecter est l'une des erreurs les plus fréquentes chez les débutants, alors autant le graver dans le marbre dès maintenant.
SELECT -- colonnes à afficher FROM -- table de départ JOIN -- jointures éventuelles WHERE -- filtre AVANT regroupement GROUP BY -- formation des groupes HAVING -- filtre APRÈS regroupement ORDER BY -- tri du résultat final
Ce n'est pas juste une question d'esthétique : SQL exécute réellement les clauses dans cet ordre logique (même si on les écrit toujours dans cet ordre à l'écriture aussi, ce qui simplifie les choses). D'abord on part d'une table, on filtre les lignes brutes, on forme les groupes, on filtre les groupes, puis on trie le résultat final. Gardez ce schéma affiché près de votre écran le temps de l'intégrer.
Trois erreurs reviennent sans cesse chez ceux qui découvrent GROUP BY. Les connaître à l'avance vous épargnera des messages d'erreur frustrants.
Si vous sélectionnez une colonne qui n'est ni agrégée, ni présente dans le GROUP BY, SQL renvoie une erreur (ou, sur certains systèmes plus permissifs, un résultat imprévisible). La règle est stricte : chaque colonne « brute » du SELECT doit apparaître dans le GROUP BY. Si vous affichez client_id et produit, les deux doivent figurer dans le GROUP BY, sinon SQL ne sait pas quelle valeur afficher pour la colonne non groupée.
On l'a vu plus haut, mais ça mérite d'être répété : utiliser WHERE avec une fonction d'agrégation (WHERE SUM(prix) > 100) provoque une erreur. Le réflexe à graver : condition sur une colonne brute → WHERE. Condition sur un résultat calculé (SUM, COUNT, AVG) → HAVING.
COUNT(*) compte toutes les lignes du groupe, NULL compris. COUNT(colonne) ne compte que les lignes où cette colonne n'est pas NULL. Si un client a un email manquant, COUNT(email) ne le comptera pas, mais COUNT(*) si. Cette nuance change parfois complètement un résultat, alors choisissez consciemment laquelle utiliser.
Jointures, GROUP BY, sous-requêtes : notre formation Data Analyst & IA vous forme au SQL, à Python, Power BI et l'IA sur des données réelles d'entreprise. Certificat de l'Université Paris 1 Panthéon-Sorbonne, mentors disponibles 7j/7.
GROUP BY se maîtrise vraiment en pratiquant sur des cas concrets. Voici comment progresser efficacement à partir d'ici.
Utilisez la table commandes enrichie de cet article et posez-vous des questions variées : le panier moyen par client (AVG), le produit le plus cher jamais commandé (MAX), le nombre de clients uniques (COUNT avec DISTINCT). Chaque question vous fait manipuler une fonction différente, et c'est cette variété qui ancre la compréhension.
La vraie puissance apparaît quand vous joignez clients et commandes, puis groupez par nom de client pour obtenir des rapports lisibles humainement (plutôt que par identifiant numérique). Si les jointures ne sont pas encore parfaitement claires pour vous, reprenez notre guide complet sur les jointures SQL avant d'aller plus loin.
GROUP BY et les jointures forment le duo fondateur du SQL analytique. Une fois ces deux piliers acquis, vous pouvez répondre à la majorité des questions business d'une entreprise. Pour transformer ces bases en un vrai métier, notre formation Data Analyst & IA vous forme au SQL, à Python, Power BI et l'IA, sur des projets réels, avec un certificat de l'Université Paris 1 Panthéon-Sorbonne, des mentors 7j/7 et un accompagnement carrière. Pour réviser les fondations SQL, notre formation SQL et notre blog restent disponibles.
En 20 minutes avec un conseiller, vous validez si le métier de Data Analyst vous correspond, vous calculez votre financement (CPF, France Travail, OPCO) et vous repartez avec un plan clair. Service gratuit, sans engagement.
GROUP BY client_id, produit crée un groupe pour chaque combinaison unique de client et de produit, plutôt qu'un groupe par client seul. C'est très utile pour des analyses plus fines : par exemple, « combien de fois chaque client a-t-il acheté chaque produit ? ». Plus vous ajoutez de colonnes au GROUP BY, plus les groupes deviennent précis (et nombreux). C'est une extension naturelle une fois le principe à une seule colonne bien compris.Formateur Data et responsable du parcours Data Analyst chez DataSuits, j'enseigne le SQL, Python et Power BI au quotidien. GROUP BY et les jointures sont les deux notions que j'explique le plus souvent : une fois maîtrisées, elles couvrent l'essentiel des besoins d'analyse en entreprise. Mon approche : toujours repartir d'un exemple concret avant la théorie.
GROUP BY transforme une liste de lignes en véritables statistiques : il suffit de choisir une colonne pour former les groupes, puis une fonction (COUNT, SUM, AVG, MIN, MAX) pour calculer sur chacun d'eux. Ajoutez HAVING pour filtrer les groupes selon leur résultat, et vous tenez l'un des outils les plus utilisés du quotidien d'un Data Analyst.
Avec les jointures d'un côté et GROUP BY de l'autre, vous possédez désormais les deux piliers qui permettent de répondre à la grande majorité des questions business : relier l'information dispersée, puis la résumer en chiffres exploitables. Il ne reste plus qu'à pratiquer, encore et encore, sur des cas réels.
Pour transformer ces bases en métier, notre formation Data Analyst & IA à 2 990 € avec certificat de l'Université Paris 1 Panthéon-Sorbonne vous forme au SQL, à Python, Power BI et l'IA sur des données réelles. Prochaine étape : prenez rendez-vous avec un conseiller. 20 minutes pour bâtir votre projet. Service gratuit, sans engagement.
Le financement ne doit jamais être un frein à votre projet.
Chez DataSuits, nos conseillers pédagogiques vous accompagnent à chaque étape pour trouver la meilleure solution de financement adaptée à votre profil:
Remplissez ce court formulaire pour candidater à la formation de votre choix.
Notre équipe pédagogique vous contactera rapidement pour échanger sur votre parcours et vous accompagner dans la suite de votre inscription.



