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.
Un agrégat est une construction de langage qui condense une collection en scalaire dans le cadre d’une opération de groupe. Les agrégats Entity SQL sont fournis sous deux formes :
Fonctions de collection Entity SQL qui peuvent être utilisées n’importe où dans une expression. Cela inclut l’utilisation de fonctions d’agrégation dans des projections et des prédicats qui agissent sur des collections. Les fonctions de collection sont le mode préféré de spécification d’agrégats dans Entity SQL.
Regroupez les agrégats dans les expressions de requête qui ont une clause GROUP BY. Comme dans Transact-SQL, les agrégats de groupe acceptent DISTINCT et ALL comme modificateurs de l’entrée d’agrégation.
Entity SQL tente d’abord d’interpréter une expression en tant que fonction de collection et si l’expression se trouve dans le contexte d’une expression SELECT, elle l’interprète en tant qu’agrégat de groupe.
Entity SQL définit un opérateur d’agrégation spécial appelé GROUPPARTITION. Cet opérateur vous permet d’obtenir une référence au jeu d’entrées groupé. Cela permet des requêtes de regroupement plus avancées, où les résultats de la clause GROUP BY peuvent être utilisés dans des emplacements autres que les fonctions d’agrégation ou de collection de groupes.
Fonctions de collection
Les fonctions de collection fonctionnent sur des collections et retournent une valeur scalaire. Par exemple, s’il s’agit orders d’une collection de tous orders, vous pouvez calculer la date d’expédition la plus ancienne avec l’expression suivante :
min(select value o.ShipDate from LOB.Orders as o)
Agrégats de groupe
Les agrégats de groupe sont calculés sur un résultat de groupe tel que défini par la clause GROUP BY. La clause GROUP BY partitionne les données en groupes. Pour chaque groupe dans le résultat, la fonction d’agrégation est appliquée et un agrégat distinct est calculé à l’aide des éléments de chaque groupe en tant qu’entrées au calcul d’agrégation. Lorsqu’une clause GROUP BY est utilisée dans une expression SELECT, seuls les noms d’expressions de regroupement, les agrégats ou les expressions constantes peuvent être présents dans la clause PROJECTION, HAVING ou ORDER BY.
L’exemple suivant calcule la quantité moyenne ordonnée pour chaque produit.
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Il est possible d’avoir un agrégat de groupe sans clause GROUP BY explicite dans l’expression SELECT. Tous les éléments sont traités en tant que groupe unique, équivalent au cas de spécifier un regroupement basé sur une constante.
select avg(ol.Quantity) from LOB.OrderLines as ol
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Les expressions utilisées dans la clause GROUP BY sont évaluées à l’aide de la même étendue de résolution de noms qui serait visible par l’expression de clause WHERE.