选择聚集函数表达式

聚集函数返回对一系列被查询的行的一个值。此值依赖于 SELECT 语句指定的 WHERE 子句的行的集合。如果缺少 WHERE 子句,则聚集函数采用的值依赖于 FROM 子句构成的所有行。

下列示例展示 projection 列表中的聚集函数:
SELECT SUM(total_price) FROM items WHERE order_num = 1013;
        SELECT COUNT(*) FROM orders WHERE order_num = 1001;
        SELECT MAX(LENGTH(fname) + LENGTH(lname)) FROM customer;
然而,如果 Projection 子句未指定 SELECT 语句的 DISTINCT 或 UNIQUE 关键字,则查询可包括一个或多个包括 DISTINCT 或 UNIQUE 关键字作为参数列表的第一个规范的聚集函数:
SELECT SUM(DISTINCT total_price) FROM items WHERE order_num = 1013;
        SELECT COUNT(DISTINCT *) FROM orders WHERE order_num = 1001;
        SELECT MAX(LENGTH(fname) + LENGTH(UNIQUE lname)) FROM customer;
然而,如果 Projection 子句和聚集函数表达式都在同一查询中指定 DISTINCT 或 UNIQUE 关键字,则数据库服务器发出错误。

对于包括聚集函数表达式的网格查询,您必须在子查询中指定 GRID 子句,每一网格服务器计算的聚集表达式的值为商,这个商的分母在参与的网格服务器之间不同。

请不要将 SQL 聚集函数与“联机分析处理”(OLAP)窗口聚集函数混淆,它们是不同类别的函数。

当聚集函数表达式紧跟在 OVER 子句之后时,数据库服务器尝试将它解释为 OLAP 聚集函数。有些 OLAP 聚集函数与 SQL 聚集函数同名(并支持相同语法的子集),但这两类函数的行为不同。

SQL 聚集函数可嵌套在 OLAP 聚集函数之中。例如,在 dollars 为 sales 中的列的上下文中,下列查询是有效的:
SELECT AVG(SUM(dollars)) OVER() FROM sales;
在上述示例中,SUM 函数是 SQL 聚集函数,且包含的 AVG 函数是 OLAP 窗口函数。查询处理的顺序规定总是在分组和聚集操作之后、最后的 ORDER BY 操作之前计算 OLAP 函数。