Instruction GROUP BY SQL

Les fonctions agrégées (comme SUM) nécessitent souvent l'ajout de la clause GROUP BY.

Clause GROUP BY

La clause GROUP BY est utilisée pour regrouper les résultats d'une requête en utilisant une ou plusieurs colonnes.

Syntaxe de SQL GROUP BY

SELECT column_name, fonction_aggrégée(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name

Exemple de SQL GROUP BY

Nous possédons le tableau "Orders" suivant :

O_Id OrderDate OrderPrice Customer
1 2008/12/29 1000 Bush
2 2008/11/23 1600 Carter
3 2008/10/05 700 Bush
4 2008/09/28 300 Bush
5 2008/08/06 2000 Adams
6 2008/07/21 100 Carter

Maintenant, nous souhaitons trouver le montant total (total des commandes) de chaque client.

Nous voulons utiliser la clause GROUP BY pour regrouper les clients.

Nous utilisons l'instruction SQL suivante :

SELECT Customer,SUM(OrderPrice) FROM Orders
GROUP BY Customer

Le jeu de résultats ressemble à ceci :

Customer SUM(OrderPrice)
Bush 2000
Carter 1700
Adams 2000

Très bien, n'est-ce pas ?

Voyons ce qui se passe si nous omettons GROUP BY :

SELECT Customer,SUM(OrderPrice) FROM Orders

Le jeu de résultats ressemble à ceci :

Customer SUM(OrderPrice)
Bush 5700
Carter 5700
Bush 5700
Bush 5700
Adams 5700
Carter 5700

Le jeu de résultats ci-dessus n'est pas ce que nous voulons.

Alors pourquoi ne pas utiliser cette instruction SELECT ci-dessus ? Explication suivante : l'instruction SELECT ci-dessus spécifie deux colonnes (Customer et SUM(OrderPrice)). "SUM(OrderPrice)" renvoie une valeur unique (le total de la colonne "OrderPrice"), tandis que "Customer" renvoie 6 valeurs (chaque valeur correspond à une ligne de la table "Orders"). Par conséquent, nous ne obtenons pas le résultat correct. Cependant, comme vous avez vu, la clause GROUP BY résout ce problème.

GROUP BY une colonne supérieure à une

Nous pouvons également appliquer la clause GROUP BY à une colonne supérieure à une, comme suit :

SELECT Customer,OrderDate,SUM(OrderPrice) FROM Orders
GROUP BY Customer,OrderDate