聚合是一种语言构造,可将集合凝结为分组作的一部分的标量。 实体 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 子句表达式可见的同一名称解析范围来计算的。