聚合函数 (实体 SQL)

聚合是一种语言构造,可将集合凝结为分组作的一部分的标量。 实体 SQL 聚合分为两种形式:

  • 可在表达式中的任何位置使用的实体 SQL 集合函数。 这包括在投影中使用聚合函数和对集合执行作的谓词。 集合函数是指定实体 SQL 中的聚合的首选模式。

  • 在具有 GROUP BY 子句的查询表达式中对聚合进行分组。 与 Transact-SQL 中一样,组聚合接受 DISTINCT 和 ALL 作为聚合输入的修饰符。

实体 SQL 首先尝试将表达式解释为集合函数,如果表达式位于 SELECT 表达式的上下文中,它将表达式解释为组聚合。

实体 SQL 定义名为 GROUPPARTITION 的特殊聚合运算符。 使用此运算符可以获取对分组输入集的引用。 这允许更高级分组查询,其中 GROUP BY 子句的结果可以在组聚合或集合函数以外的位置使用。

集合函数

集合函数对集合进行作并返回标量值。 例如,如果 orders 是全部 orders的集合,则可以使用以下表达式计算最早的发货日期:

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

组聚合

组聚合是通过 GROUP BY 子句定义的组结果计算的。 GROUP BY 子句将数据分区为组。 对于结果中的每个组,将应用聚合函数,并使用每个组中的元素作为聚合计算的输入来计算单独的聚合。 在 SELECT 表达式中使用 GROUP BY 子句时,投影、HAVING 或 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

GROUP BY 子句中使用的表达式是使用对 WHERE 子句表达式可见的同一名称解析范围来计算的。

另请参阅