Composants de la clause GROUP BY
La clause GROUP BY contient les éléments suivants :
- Une ou plusieurs expressions sans agrégation. Ce sont généralement des références à des colonnes de regroupement.
- Le mot clé ALL (facultatif) qui indique que tous les groupes produits par la clause GROUP BY sont renvoyés, même si certains d'entre eux ne comportent aucune ligne correspondant aux critères de recherche.
- CUBE ou ROLLUP.
- La clause HAVING est habituellement utilisée avec la clause GROUP BY, bien qu'elle puisse être spécifiée séparément.
Vous pouvez effectuer un regroupement pour une expression à condition qu'elle ne contienne pas de fonction d'agrégation. Par exemple :
SELECT DATEPART(yy, HireDate) AS Year,
COUNT(*) AS NumberOfHires
FROM AdventureWorks.HumanResources.Employee
GROUP BY DATEPART(yy, HireDate)
Voici l'ensemble des résultats.
Year NumberOfHires
----------- -------------
1997 2
2001 21
2000 45
1996 1
2003 3
1999 198
1998 16
2002 4
(8 row(s) affected)
Dans une clause GROUP BY, vous devez indiquer le nom d'une colonne d'une table ou d'une vue, et non pas le nom d'une colonne d'un ensemble de résultats attribué avec une clause AS. Par exemple, le remplacement de la clause GROUP BY DATEPART(yy, HireDate) par GROUP BY Year est interdit.
Vous pouvez indiquer plusieurs colonnes dans la clause GROUP BY afin d'imbriquer des groupes ; en d'autres termes, vous pouvez regrouper une table selon n'importe quelle combinaison de colonnes. Par exemple, la requête suivante calcule le prix moyen et le total annuel des ventes à ce jour, groupés par ID de produit et par ID d'offre spéciale :
USE AdventureWorks;
GO
SELECT ProductID, SpecialOfferID, AVG(UnitPrice) AS 'Average Price',
SUM(LineTotal) AS SubTotal
FROM Sales.SalesOrderDetail
GROUP BY ProductID, SpecialOfferID
ORDER BY ProductID
GO