更新时间:2025-05-29 GMT+08:00
聚集函数嵌套
描述:对聚集函数分组计算的结果再进行一次聚集函数操作。
一般可描述为:
SELECT AGG1(AGG2(column_name1)) FROM table_name GROUP BY column_name2;
等价为:
SELECT AGG1(value) FROM (SELECT AGG2(column_name1) value FROM table_name GROUP BY column_name2);
其中:
- AGG1():表示外层聚集函数。
- AGG2():表示内层聚集函数。
- table_name:表示表名。
- column_name1、column_name2:表示列名。
- value:表示内层聚集函数结果的别名。
整体含义可描述为:将内层聚集函数AGG2()分组计算的结果作为外层聚集函数AGG1()的输入再计算一次。

- 嵌套的聚集函数应位于SELECT和FROM之间,否则无意义。
- 使用嵌套聚集函数的SELECT语句应包含GROUP BY子句。
- 与嵌套聚集函数同时被SELECT的,应同为嵌套聚集函数,或为常量表达式。
- 聚集函数仅支持一次聚集函数嵌套操作。
- 当前支持以下聚集函数之间的嵌套:avg、max、min、sum、var_pop、var_samp、variance、stddev_pop、stddev_samp、stddev、median、regr_sxx、regr_syy、regr_sxy、regr_avgx、regr_avgy、regr_r2、regr_slope、regr_intercept、covar_pop、covar_samp、corr和listagg。
- 内层聚集函数的返回结果类型应符合外层聚集函数的参数类型。
示例:
gaussdb=# CREATE TABLE test1 (id INT,val INT); CREATE TABLE gaussdb=# INSERT INTO test1 VALUES (1, 1); INSERT 0 1 gaussdb=# INSERT INTO test1 VALUES (1, null); INSERT 0 1 gaussdb=# INSERT INTO test1 VALUES (2, 10); INSERT 0 1 gaussdb=# INSERT INTO test1 VALUES (2, 55); INSERT 0 1 gaussdb=# SELECT SUM(MIN(val)) FROM test1 GROUP BY id; sum ----- 11 (1 row) gaussdb=# DROP TABLE test1; DROP TABLE
父主题: 聚集函数