GROUP BY – Grouper les données
Bonne lecture et bon apprentissage !
Junior TSAFACK – 08/08/2026
⏱️ Temps de lecture estimé : 6 minutes
La commande GROUP BY est utilisée en SQL pour grouper plusieurs résultats et utiliser une fonction de totaux sur un groupe de résultats. Sur une table qui contient toutes les ventes d’un magasin, il est par exemple possible de regrouper les ventes par clients identiques et d’obtenir le coût total des achats pour chaque client.
Syntaxe d’utilisation de GROUP BY
Section titled “Syntaxe d’utilisation de GROUP BY”De façon générale, la commande GROUP BY s’utilise de la façon suivante :
SELECT colonne1, fonction(colonne2) FROM table GROUP BY colonne1💡 Bon à savoir : Cette commande doit toujours s’utiliser après la clause
WHEREet avant la clauseHAVING(si elles sont présentes).
Exemple d’utilisation
Section titled “Exemple d’utilisation”Prenons en considération une table « achat » qui résume les ventes d’une boutique :
Table « achat »
Section titled “Table « achat »”| id | client | tarif | date_achat |
|---|---|---|---|
| 1 | Pierre | 102 | 2012-10-23 |
| 2 | Simon | 47 | 2012-10-27 |
| 3 | Marie | 18 | 2012-11-05 |
| 4 | Marie | 20 | 2012-11-14 |
| 5 | Pierre | 160 | 2012-12-03 |
Ce tableau contient une colonne qui sert d’identifiant pour chaque ligne, une autre qui contient le nom du client, le coût de la vente et la date d’achat.
Pour obtenir le coût total de chaque client en regroupant les commandes des mêmes clients, il faut utiliser la requête suivante :
SELECT client, SUM(tarif)FROM achatGROUP BY clientLa fonction SUM() permet d’additionner la valeur de chaque tarif pour un même client.
Résultat :
| client | SUM(tarif) |
|---|---|
| Pierre | 262 |
| Simon | 47 |
| Marie | 38 |
La manière simple de comprendre GROUP BY, c’est tout simplement d’assimiler qu’il va éviter de présenter plusieurs fois les mêmes lignes. C’est une méthode pour regrouper les données.
Comparaison avec SELECT sans GROUP BY
Section titled “Comparaison avec SELECT sans GROUP BY”Juste à titre informatif, voici ce qu’on obtient de la requête sans utiliser GROUP BY :
SELECT client, SUM(tarif)FROM achatRésultat :
| client | SUM(tarif) |
|---|---|
| Pierre | 262 |
| Simon | 47 |
| Marie | 38 |
| Marie | 38 |
| Pierre | 262 |
Sans GROUP BY, la fonction SUM() s’applique à l’ensemble des lignes et chaque ligne est répétée avec le même total, ce qui est peu pertinent.
Utilisation d’autres fonctions d’agrégation
Section titled “Utilisation d’autres fonctions d’agrégation”Il existe plusieurs fonctions qui peuvent être utilisées pour manipuler plusieurs enregistrements : ce sont les fonctions d’agrégation statistiques.
| Fonction | Description | Exemple d’utilisation |
|---|---|---|
AVG() |
Calcule la moyenne d’un ensemble de valeurs | AVG(tarif) → panier moyen par client |
COUNT() |
Compte le nombre de lignes concernées | COUNT(id) → nombre d’achats par client |
MAX() |
Récupère la plus haute valeur | MAX(tarif) → achat le plus cher par client |
MIN() |
Récupère la plus petite valeur | MIN(date_achat) → date du premier achat |
SUM() |
Calcule la somme de plusieurs lignes | SUM(tarif) → total des achats d’un client |
Exemples avec d’autres fonctions
Section titled “Exemples avec d’autres fonctions”Nombre d’achats par client
Section titled “Nombre d’achats par client”SELECT client, COUNT(*) AS nb_achatsFROM achatGROUP BY clientRésultat :
| client | nb_achats |
|---|---|
| Pierre | 2 |
| Simon | 1 |
| Marie | 2 |
Panier moyen par client (moyenne des montants)
Section titled “Panier moyen par client (moyenne des montants)”SELECT client, AVG(tarif) AS panier_moyenFROM achatGROUP BY clientRésultat :
| client | panier_moyen |
|---|---|
| Pierre | 131 |
| Simon | 47 |
| Marie | 19 |
Date du premier achat par client
Section titled “Date du premier achat par client”SELECT client, MIN(date_achat) AS premiere_commandeFROM achatGROUP BY clientRésultat :
| client | premiere_commande |
|---|---|
| Pierre | 2012-10-23 |
| Simon | 2012-10-27 |
| Marie | 2012-11-05 |
GROUP BY sur plusieurs colonnes
Section titled “GROUP BY sur plusieurs colonnes”Il est possible de grouper sur plusieurs colonnes. Par exemple, pour obtenir le total des ventes par client et par mois :
SELECT client, YEAR(date_achat) AS annee, MONTH(date_achat) AS mois, SUM(tarif) AS totalFROM achatGROUP BY client, YEAR(date_achat), MONTH(date_achat);(Note : les fonctions YEAR() et MONTH() sont disponibles dans MySQL, d’autres SGBD utilisent EXTRACT.)
Bonnes pratiques
Section titled “Bonnes pratiques”- Toute colonne du
SELECTqui n’est pas une fonction d’agrégation doit figurer dans leGROUP BY(sauf dans certains SGBD non stricts comme MySQL en mode par défaut, mais c’est une mauvaise pratique). - Utilisez des alias pour les colonnes calculées afin d’améliorer la lisibilité.
GROUP BYest souvent utilisé avecORDER BYpour trier les résultats (par exemple, par total décroissant).
Prochain chapitre
Section titled “Prochain chapitre”Vous savez désormais comment grouper des données avec GROUP BY et utiliser des fonctions d’agrégation. Mais comment filtrer les groupes, par exemple pour ne garder que les clients ayant dépensé plus de 100€ ?
👉 Chapitre 14 : HAVING – Filtrer les groupes
Bonne continuation !
Junior TSAFACK – 08/08/2026