Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Spécifie les groupes dans lesquels les objets retournés par une expression de requête (SELECT) doivent être placés.
Syntaxe
[ GROUP BY aliasedExpression [ ,...n ] ]
Les arguments
aliasedExpression Toute expression de requête valide sur laquelle le regroupement est effectué.
expression peut être une propriété ou une expression non agrégée qui fait référence à une propriété retournée par la clause FROM. Chaque expression d’une clause GROUP BY doit être évaluée à un type qui peut être comparé pour l’égalité. Ces types sont généralement des primitives scalaires telles que des nombres, des chaînes et des dates. Vous ne pouvez pas regrouper par collection.
Remarques
Si les fonctions d’agrégation sont incluses dans la liste> select de clause <SELECT, GROUP BY calcule une valeur récapitulative pour chaque groupe. Lorsque GROUP BY est spécifié, chaque nom de propriété dans une expression non agrégée dans la liste de sélection doit être inclus dans la liste GROUP BY, ou l’expression GROUP BY doit correspondre exactement à l’expression select list.
Remarque
Si la clause ORDER BY n’est pas spécifiée, les groupes retournés par la clause GROUP BY ne sont pas dans un ordre particulier. Pour spécifier un classement particulier des données, nous vous recommandons d’utiliser toujours la clause ORDER BY.
Lorsqu’une clause GROUP BY est spécifiée, explicitement ou implicitement (par exemple, par une clause HAVING dans la requête), l’étendue actuelle est masquée et une nouvelle étendue est introduite.
La clause SELECT, la clause HAVING et la clause ORDER BY ne pourront plus faire référence aux noms d’éléments spécifiés dans la clause FROM. Vous ne pouvez faire référence qu’aux expressions de regroupement elles-mêmes. Pour ce faire, vous pouvez affecter de nouveaux noms (alias) à chaque expression de regroupement. Si aucun alias n’est spécifié pour une expression de regroupement, Entity SQL tente de en générer un à l’aide des règles de génération d’alias, comme illustré dans l’exemple suivant.
SELECT g1, g2, ...gn FROM c as c1
GROUP BY e1 as g1, e2 as g2, ...en as gn
Les expressions de la clause GROUP BY ne peuvent pas faire référence aux noms définis précédemment dans la même clause GROUP BY.
Outre le regroupement de noms, vous pouvez également spécifier des agrégats dans la clause SELECT, la clause HAVING et la clause ORDER BY. Un agrégat contient une expression évaluée pour chaque élément du groupe. L’opérateur d’agrégation réduit les valeurs de toutes ces expressions (généralement, mais pas toujours, en une seule valeur). L’expression d’agrégation peut faire référence aux noms d’éléments d’origine visibles dans l’étendue parente ou à l’un des nouveaux noms introduits par la clause GROUP BY elle-même. Bien que les agrégats apparaissent dans la clause SELECT, la clause HAVING et la clause ORDER BY, elles sont réellement évaluées sous la même étendue que les expressions de regroupement, comme illustré dans l’exemple suivant.
SELECT name, sum(o.Price * o.Quantity) as total
FROM orderLines as o
GROUP BY o.Product as name
Cette requête utilise la clause GROUP BY pour produire un rapport sur le coût de tous les produits commandés, divisés par produit. Il donne le nom name au produit dans le cadre de l’expression de regroupement, puis fait référence à ce nom dans la liste SELECT. Il spécifie également l’agrégat sum dans la liste SELECT qui référence en interne le prix et la quantité de la ligne de commande.
Chaque expression GROUP By clé doit avoir au moins une référence à l’étendue d’entrée :
SELECT FROM Persons as P
GROUP BY Q + P -- GOOD
GROUP BY Q -- BAD
GROUP BY 1 -- BAD, a constant is not allowed
Pour obtenir un exemple d’utilisation de GROUP BY, consultez HAVING.
Exemple :
La requête Entity SQL suivante utilise l’opérateur GROUP BY pour spécifier des groupes dans lesquels les objets sont retournés par une requête. La requête est basée sur adventureWorks Sales Model. Pour compiler et exécuter cette requête, procédez comme suit :
Suivez la procédure dans How to : Execute a Query that Returns PrimitiveType Results.
Transmettez la requête suivante en tant qu’argument à la
ExecutePrimitiveTypeQueryméthode :
SELECT VALUE name FROM AdventureWorksEntities.Products
AS P GROUP BY P.Name HAVING MAX(P.ListPrice) > @price