聚合规范函数 (Entity SQL)

聚合是缩减一系列输入值(例如,缩减为单个值)的表达式。聚合通常与 SELECT 表达式的 GROUP BY 子句一起使用,对于可以使用聚合的位置存在一些约束。

下表列出了 Entity SQL 聚合规范函数。

函数 说明

Avg(expression)

返回非 null 值的平均值。

参数

Int32Int64DoubleDecimal

返回值

expression 的类型。如果所有输入值均为 null 值,则为 Null

示例

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

BigCount(expression)

返回包含 null 值和重复值的聚合的大小。

参数

任何类型。

返回值

Int64

示例

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

Count(expression)

返回包含 null 值和重复值的聚合的大小。

参数

任何类型。

返回值

Int32

示例

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

Max(expression)

返回非 null 值的最大值。

参数

ByteInt16Int32Int64ByteSingleDoubleDecimalDateTimeDateTimeOffsetTimeStringBinary

返回值

expression 的类型。如果所有输入值均为 null 值,则为 Null

示例

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

Min(expression)

返回非 null 值的最小值。

参数

ByteInt16Int32Int64ByteSingleDoubleDecimalDateTimeDateTimeOffsetTimeStringBinary

返回值

expression 的类型。如果所有输入值均为 null 值,则为 Null

示例

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

StDev(expression)

返回非 null 值的标准偏差。

参数

Int32Int64DoubleDecimal

返回值

Double。如果所有输入值均为 null 值,则为 Null

示例

SELECT VALUE StDev(product.ListPrice)

FROM AdventureWorksEntities.Product AS product

where product.ListPrice > 2.0M

Sum(expression)

返回非 null 值的总和。

参数

Int32Int64DoubleDecimal

返回值

Double。如果所有输入值均为 null 值,则为 Null

示例

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

Microsoft SQL 客户端托管提供程序中提供了等效功能。有关更多信息,请参见 用于实体框架函数的 SQL Server .NET Framework 数据提供程序 (SqlClient)

基于集合的聚合

基于集合的聚合(集合函数)针对集合而运行并返回值。例如,如果 ORDERS 是所有订单的集合,则可以使用以下表达式计算最早的发货日期:

min(select value o.ShipDate from LOB.Orders as o)

将在当前环境名称解析范围内计算基于集合的聚合内的表达式。

基于组的聚合

基于组的聚合将按照 GROUP BY 子句定义的方式对组进行计算。对于结果中的每个组,将使用每个组中的元素作为聚合计算的输入来计算单独的聚合。当在 select 表达式中使用 group-by 子句时,在投影或 order-by 子句中只存在分组表达式名称、聚合或常量表达式。

以下示例计算每种产品的平均订购数量:

select p, avg(ol.Quantity) from LOB.OrderLines as ol
  group by ol.Product as p

在 SELECT 表达式中,可以在没有显式 group-by 子句的情况下使用基于组的聚合。在这种情况下,会将所有元素视为单个组。这等效于基于常量指定分组的情形。例如,请看下面的表达式:

select avg(ol.Quantity) from LOB.OrderLines as ol

此表达式等效于以下表达式:

select avg(ol.Quantity) from LOB.OrderLines as ol group by 1

将在 WHERE 子句表达式可见的名称解析范围内计算基于组的聚合中的表达式。

与在 Transact-SQL 中类似,基于组的聚合也可以指定 ALL 或 DISTINCT 修饰符。如果指定 DISTINCT 修饰符,则将从聚合输入集合中消除重复项,然后计算聚合。如果指定 ALL 修饰符(或者未指定修饰符),则不执行重复项消除。

基于集合的聚合与基于组的聚合

基于集合的聚合是在 Entity SQL 中指定聚合的首选模式。然而,也支持基于组的聚合,以使 SQL Server 用户能够更轻松地学会使用 Entity SQL。

同样,对于 SQL 类行为,支持指定 DISTINCT(或 ALL)作为聚合输入的修饰符,但首选机制是改用 set() 运算符。

另请参见

概念

规范函数 (Entity SQL)