Si vous souhaitez regrouper des lignes avec des valeurs iden­tiques dans un groupe, l’ins­truc­tion SQL GROUP BY est la commande qu’il vous faut. La plupart du temps, elle est utilisée en com­bi­nai­son avec des fonctions d’agré­ga­tion.

Qu’est-ce que SQL GROUP BY ?

Dans le Struc­tu­red Query Language (SQL), SQL GROUP BY est une ins­truc­tion utilisée pour regrouper les lignes ayant des valeurs iden­tiques. Elle est utilisée avec la commande SQL SELECT et suit l’ins­truc­tion WHERE. On utilise souvent SQL GROUP BY en com­bi­nai­son avec des fonctions comme SQL AVG(), SQL COUNT(), MAX(), MIN() ou SUM(). Cela vous permet de effectuer des calculs et d’afficher les résultats dans votre tableau. Cette ins­truc­tion est par­ti­cu­liè­re­ment utile lorsqu’il s’agit de dé­ter­mi­ner un ordre ou de relier des valeurs entre elles.

Serveurs virtuels (VPS)
VPS éco­no­miques sur serveurs Dell En­ter­prise
  • 1 Gbit/s de bande passante et trafic illimité
  • Dis­po­ni­bi­lité de 99,99 % et cer­ti­fi­ca­tion ISO
  • As­sis­tance 24/7 primée pour sa qualité et con­seil­ler personnel

Syntaxe et fonc­tion­ne­ment

La syntaxe de base de SQL GROUP BY se présente comme suit :

SELECT colonne1, colonne2, colonne3, ...
FROM nom_du_tableau
GROUP BY colonne1, colonne2, colonne3, ...;
sql

On utilise souvent GROUP BY avec WHERE pour filtrer les résultats avant de les regrouper. La voici :

SELECT colonne1, colonne2, colonne3, ...
FROM nom_du_tableau
WHERE condition
GROUP BY colonne1, colonne2, colonne3, ...
ORDER BY colonne1, colonne2, colonne3, ...;
sql

Exemple d’uti­li­sa­tion avec COUNT()

Pour illustrer l’uti­li­sa­tion de SQL GROUP BY, nous allons créer un tableau simple appelé « Liste des clients ». Celui-ci contient dif­fé­rentes colonnes : Numéro de client, Nom, Ville et Articles.

Numéro de client Nom Ville Articles
1427 Berron Paris 13
1377 Froissy Stras­bourg 9
1212 Sulis Stras­bourg 15
1431 Verdon Lille 22
1118 Paré Paris 10

Nous pouvons main­te­nant utiliser SQL GROUP BY, par exemple en com­bi­nai­son avec la fonction COUNT(), pour lister de quelles villes pro­vien­nent combien de clients. Voici le code cor­res­pon­dant :

SELECT Ville, COUNT(*) AS Nombre
FROM Liste des clients
GROUP BY Ville;
sql

Comme résultat, nous obtenons ce nouveau tableau :

Ville Nombre
Lille 1
Paris 2
Stras­bourg 2

Nous utilisons ici les alias SQL pour afficher les résultats sous forme de « nombre ».

L’ins­truc­tion en com­bi­nai­son avec SUM()

Dans l’exemple suivant, nous utilisons SQL GROUP BY en com­bi­nai­son avec SUM() pour dé­ter­mi­ner et afficher combien d’articles ont été commandés depuis Stras­bourg. Pour cela, nous utilisons ce code :

SELECT Ville, SUM(Articles) AS Total
FROM Liste des clients
WHERE Ville = 'Strasbourg'.
GROUP BY Ville;
sql

Nous obtenons comme résultat :

Ville Total
Stras­bourg 24

Ap­pli­ca­tion avec ORDER BY

Une com­bi­nai­son avec ORDER BY est également possible. Dans ce cas, nous trions notre tableau en fonction du nombre le plus élevé d’articles commandés par client et par ville. Nous com­men­çons par la ville dans laquelle un client a acheté le plus d’articles. Le code cor­res­pon­dant, pour lequel nous combinons SQL GROUP BY avec la fonction MAX() et ORDER BY, est le suivant :

SELECT Ville, MAX(Articles) AS Quantité (ordre décroissant)
FROM Liste des clients
GROUP BY Ville ORDER BY Quantité DESC;
sql

La sortie cor­res­pon­dante est alors la suivante :

Ville Quantité (ordre dé­crois­sant)
Lille 22
Stras­bourg 15
Paris 13

Com­bi­nai­son avec l’ins­truc­tion HAVING

Vous pouvez également combiner SQL GROUP BY avec SQL HAVING. Dans l’exemple suivant, nous retirons de la liste les clients dont le numéro de client est inférieur à 1300. Nous trions les autres personnes en fonction du nombre d’articles qu’elles ont commandés, dans l’ordre croissant. Voici à quoi ressemble le code :

SELECT Ville, Numéro de client, MIN(Articles) AS Quantité (ordre croissant)
FROM Liste des clients
GROUP BY Ville, Numéro de client HAVING Numéro de client > 1300;
sql

Nous obtenons ainsi ce tableau comme nouvelle sortie :

Ville Numéro de client Quantité (ordre croissant)
Stras­bourg 1377 9
Paris 1427 13
Lille 1431 22

Al­ter­na­tives à SQL GROUP BY

Une al­ter­na­tive populaire à SQL GROUP BY est l’ins­truc­tion PARTITION BY. La dif­fé­rence est que toutes les valeurs d’origine sont con­ser­vées et affichées. De plus, de nom­breuses fonctions d’agré­ga­tion men­tion­nées plus haut fonc­tion­nent également sans SQL GROUP BY.

Conseil

Une base de données sur mesure : avec le serveur d’hé­ber­ge­ment SQL de IONOS, vous n’avez pas seulement le choix entre MSSQL, MySQL ou MariaDB, mais vous bé­né­fi­ciez dans tous les cas d’une per­for­mance ex­cep­tion­nelle, de fonctions de sécurité puis­santes et d’un conseil per­son­na­lisé.

Aller au menu principal