聚合是缩减一系列输入值(例如,缩减为单个值)的表达式。聚合通常与 SELECT 表达式的 GROUP BY 子句一起使用,对于可以使用聚合的位置存在一些约束。
下表列出了 Entity SQL 聚合规范函数。
函数 | 说明 |
---|---|
Avg(expression) |
返回非 null 值的平均值。 参数 Int32、 Int64、Double 和 Decimal。 返回值 expression 的类型。如果所有输入值均为 null 值,则为 Null。 示例
|
BigCount(expression) |
返回包含 null 值和重复值的聚合的大小。 参数 任何类型。 返回值 Int64。 示例
|
Count(expression) |
返回包含 null 值和重复值的聚合的大小。 参数 任何类型。 返回值 Int32。 示例
|
Max(expression) |
返回非 null 值的最大值。 参数 Byte、Int16、Int32、Int64、Byte、Single、Double、Decimal、DateTime、DateTimeOffset、Time、String、Binary。 返回值 expression 的类型。如果所有输入值均为 null 值,则为 Null。 示例
|
Min(expression) |
返回非 null 值的最小值。 参数 Byte、Int16、Int32、Int64、Byte、Single、Double、Decimal、DateTime、DateTimeOffset、Time、String 和 Binary 返回值 expression 的类型。如果所有输入值均为 null 值,则为 Null。 示例
|
StDev(expression) |
返回非 null 值的标准偏差。 参数 Int32、Int64、Double、Decimal。 返回值 Double。如果所有输入值均为 null 值,则为 Null。 示例
|
Sum(expression) |
返回非 null 值的总和。 参数 Int32、Int64、Double、Decimal。 返回值 Double。如果所有输入值均为 null 值,则为 Null。 示例
|
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() 运算符。