云数据库 GaussDB-聚集函数:聚集函数嵌套

时间:2025-02-12 15:05:53

聚集函数嵌套

描述:对聚集函数分组计算的结果再进行一次聚集函数操作。

一般可描述为:

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()的输入再计算一次。

  1. 嵌套的聚集函数应位于SELECT和FROM之间,否则无意义。
  2. 使用嵌套聚集函数的SELECT语句应包含GROUP BY子句。
  3. 与嵌套聚集函数同时被SELECT的,应同为嵌套聚集函数,或为常量表达式。
  4. 聚集函数仅支持一次聚集函数嵌套操作。
  5. 当前支持以下聚集函数之间的嵌套: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。
  6. 内层聚集函数的返回结果类型应符合外层聚集函数的参数类型。

示例:

gaussdb=# CREATE TABLE test1 (id INT,val INT);CREATE TABLEgaussdb=# INSERT INTO test1 VALUES (1, 1);INSERT 0 1gaussdb=# INSERT INTO test1 VALUES (1, null);INSERT 0 1gaussdb=# INSERT INTO test1 VALUES (2, 10);INSERT 0 1gaussdb=# INSERT INTO test1 VALUES (2, 55);INSERT 0 1gaussdb=# SELECT SUM(MIN(val)) FROM test1 GROUP BY id; sum-----  11(1 row)gaussdb=# DROP TABLE test1;DROP TABLE
support.huaweicloud.com/centralized-devg-v8-gaussdb/gaussdb-42-0373.html