Fonctions d'agrégation canoniques
Les agrégats sont des expressions qui réduisent une série de valeurs d'entrée en, par exemple, une seule valeur. Ils sont normalement utilisés avec la clause GROUP BY de l'expression SELECT et leur utilisation est sujette à certaines contraintes.
Fonctions canoniques Entity SQL d’agrégation
Les fonctions canoniques Entity SQL d’agrégation sont les suivantes.
Avg(expression)
Retourne la moyenne des valeurs non Null.
Arguments
Int32
, Int64
, Double
et Decimal
.
Valeur de retour
Type de expression
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE AVG(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
BigCount(expression)
Retourne la taille de l'agrégat, y compris les valeurs Null et dupliquées.
Arguments
Tout type.
Valeur de retour
Élément Int64
.
Exemple
queryString = @"SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE BigCount(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Count(expression)
Retourne la taille de l'agrégat, y compris les valeurs Null et dupliquées.
Arguments
Tout type.
Valeur de retour
Élément Int32
.
Exemple
queryString = @"SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Count(p.ProductID)
FROM AdventureWorksEntities.Products AS p
Max(expression)
Retourne la valeur maximale des valeurs non-Null.
Arguments
Byte
, Int16
, Int32
, Int64
, Byte
, Single
, Double
, Decimal
, DateTime
, DateTimeOffset
, Time
, String
, Binary
.
Valeur de retour
Type de expression
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MAX(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Min(expression)
Retourne la valeur minimale des valeurs non Null.
Arguments
Byte
, Int16
, Int32
, Int64
, Byte
, Single
, Double
, Decimal
, DateTime
, DateTimeOffset
, Time
, String
, Binary
.
Valeur de retour
Type de expression
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE MIN(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
StDev(expression)
Retourne l'écart type des valeurs non Null.
Arguments
Int32
, Int64
, Double
, Decimal
.
Valeur de retour
Un Double
. Null
si toutes les valeurs d'entrée sont null
.
Exemple
queryString = @"SELECT VALUE StDev(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE StDev(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
StDevP(expression)
Retourne l'écart type pour le remplissage de toutes les valeurs.
Arguments
Int32
, Int64
, Double
, Decimal
.
Valeur de retour
Double
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE StDevP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE StDevP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
Sum(expression)
Retourne la somme des valeurs non-Null.
Arguments
Int32
, Int64
, Double
, Decimal
.
Valeur de retour
Double
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products as p";
SELECT VALUE Sum(p.ListPrice)
FROM AdventureWorksEntities.Products AS p
Var(expression)
Retourne la variance de toutes les valeurs non-Null.
Arguments
Int32
, Int64
, Double
, Decimal
.
Valeur de retour
Double
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE Var(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE Var(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
VarP(expression)
Retourne la variance pour le remplissage de toutes les valeurs non-Null.
Arguments
Int32
, Int64
, Double
, Decimal
.
Valeur de retour
Double
, ou null
si toutes les valeurs d’entrée sont null
.
Exemple
queryString = @"SELECT VALUE VarP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price";
SELECT VALUE VarP(product.ListPrice)
FROM AdventureWorksEntities.Products AS product
WHERE product.ListPrice > @price
Des fonctionnalités équivalentes sont disponibles dans le fournisseur managé Client Microsoft SQL. Pour plus d’informations, consultez Fonctions SqlClient pour Entity Framework.
Agrégats basés sur des collections
Les agrégats basés sur des collections (fonctions de collection) opèrent sur des collections et retournent une valeur. Par exemple, si ORDERS est une collection de toutes les commandes, vous pouvez calculer la première date d’expédition (ship date) grâce à l’expression suivante :
min(select value o.ShipDate from LOB.Orders as o)
Les expressions figurant dans des agrégats basés sur des collections sont évalués dans la résolution de noms de portée ambiante actuelle.
Agrégats basés sur des groupes
Les agrégats basés sur des groupes sont calculés sur un groupe défini par la clause GROUP BY. Pour chaque groupe du résultat, un agrégat distinct est calculé en utilisant les éléments de chaque groupe fourni en entrée pour le calcul. Lorsqu'une clause group-by est utilisée dans une expression select, seuls des noms d'expressions de regroupement, des agrégats ou des expressions constantes peuvent figurer dans la projection ou la clause order-by.
L'exemple suivant calcule la quantité moyenne commandée pour chaque produit :
select p, avg(ol.Quantity) from LOB.OrderLines as ol
group by ol.Product as p
Un agrégat basé sur un groupe peut ne pas avoir de clause group-by explicite dans l’expression SELECT. Dans ce cas, tous les éléments sont traités comme un même groupe. Cela revient à spécifier un regroupement basé sur une constante. L'expression suivante, par exemple :
select avg(ol.Quantity) from LOB.OrderLines as ol
est équivalente à celle-ci :
select avg(ol.Quantity) from LOB.OrderLines as ol group by 1
Les expressions figurant dans des agrégats basés sur des groupes sont évalués dans la résolution de noms de portée qui serait visible pour l’expression de la clause WHERE.
Comme dans Transact-SQL, les agrégats basés sur des groupes peuvent aussi spécifier un modificateur ALL ou DISTINCT. Si le modificateur DISTINCT est spécifié, les doublons sont éliminés de la collection d’entrée de l’agrégat, avant que celui-ci ne soit calculé. Si le modificateur ALL est spécifié (ou si aucun modificateur ne l'est), les doublons ne sont pas éliminés.