Partager via


Fonctions canoniques d'agrégation (Entity SQL)

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.

Le tableau suivant présente les fonctions canoniques Entité SQL d'agrégation.

Fonction Description

Avg(expression)

Retourne la moyenne des valeurs non Null.

Arguments

Int32, Int64, Double et Decimal.

Valeur de retour

Type de expression. Null si toutes les valeurs d'entrée sont null.

Exemple

SELECT VALUE AVG(p.ListPrice) FROM AdventureWorksEntities.Product as p

BigCount(expression)

Retourne la taille de l'agrégat, y compris les valeurs Null et dupliquées.

Arguments

N'importe quel type.

Valeur de retour

Int64.

Exemple

SELECT VALUE BigCount(p.ProductID) FROM AdventureWorksEntities.Product as p

Count(expression)

Retourne la taille de l'agrégat, y compris les valeurs Null et dupliquées.

Arguments

N'importe quel type.

Valeur de retour

Int32.

Exemple

SELECT VALUE Count(p.ProductID) FROM AdventureWorksEntities.Product 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. Null si toutes les valeurs d'entrée sont null.

Exemple

SELECT VALUE Max(p.ListPrice) FROM AdventureWorksEntities.Product 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 et Binary

Valeur de retour

Type de expression. Null si toutes les valeurs d'entrée sont null.

Exemple

SELECT VALUE Min(p.ListPrice) FROM AdventureWorksEntities.Product as p

StDev(expression)

Retourne l'écart type des valeurs non Null.

Arguments

Int32, Int64, Double, Decimal.

Valeur de retour

Double. Null si toutes les valeurs d'entrée sont null.

Exemple

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

Retourne la somme des valeurs non Null.

Arguments

Int32, Int64, Double, Decimal.

Valeur de retour

Double. Null si toutes les valeurs d'entrée sont null.

Exemple

SELECT VALUE Sum(p.ListPrice) FROM AdventureWorksEntities.Product as p

Des fonctionnalités équivalentes sont disponibles dans le fournisseur managé Client Microsoft SQL. Pour plus d'informations, voir .Fournisseur de données .NET Framework pour SQL Server (SqlClient) pour les fonctions 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 l'étendue de résolution de noms 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 seront 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 l'étendue de résolution de noms 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.

Agrégats basés sur des collections et agrégats basés sur des groupes

Dans Entité SQL, la spécification des agrégats s'effectue de préférence par agrégats basés sur les collections. Les agrégats basés sur des groupes sont toutefois également pris en charge pour permettre aux utilisateurs SQL Server d'apprendre plus facilement Entité SQL.

De même, la spécification de DISTINCT (ou de ALL) en tant que modificateur de l'entrée de l'agrégat est prise en charge pour proposer un comportement similaire à celui de SQL, même si le mécanisme privilégié est l'utilisation de l'opérateur set().

Voir aussi

Concepts

Fonctions canoniques (Entity SQL)