首页 > 数据库 > > 函数和操作符-聚集函数
描述:所有输入行的expression总和。
返回类型:
通常情况下输入数据类型和输出数据类型是相同的,但以下情况会发生类型转换:
示例:
SELECT SUM(ss_ext_tax) FROM tpcds.STORE_SALES;
sum
--------------
213267594.69
(1 row)描述:
所有输入行中expression的最大值;
参数类型:任意数组、数值、字符串、日期/时间类型。
返回类型:与参数数据类型相同
示例:
SELECT MAX(inv_quantity_on_hand) FROM tpcds.inventory;描述:
所有输入行中expression的最小值;
参数类型:任意数组、数值、字符串、日期/时间类型。
返回类型:与参数数据类型相同
示例:
SELECT MIN(inv_quantity_on_hand) FROM tpcds.inventory;
min
-----
0
(1 row)描述:所有输入值的均值(算术平均)。
返回类型:
对于任何整数类型输入,结果都是NUMBER类型。
对于任何浮点输入,结果都是DOUBLE PRECISION类型。
否则和输入数据类型相同。
示例:
SELECT AVG(inv_quantity_on_hand) FROM tpcds.inventory;
avg
----------------------
500.0387129084044604
(1 row)描述:返回表中满足expression不为NULL的行数。
返回类型:BIGINT
示例:
SELECT COUNT(inv_quantity_on_hand) FROM tpcds.inventory;
count
----------
11158087
(1 row)描述:返回表中的记录行数。
返回类型:BIGINT
示例:
SELECT COUNT(*) FROM tpcds.inventory;
count
----------
11745000
(1 row)描述:将所有输入值(包括空)连接成一个数组。
返回类型:参数类型的数组
示例:
SELECT ARRAY_AGG(sr_fee) FROM tpcds.store_returns WHERE sr_customer_sk = 2;
array_agg
---------------
{22.18,63.21}
(1 row)描述:将输入值连接成为一个字符串,用分隔符分开。
返回类型:和参数数据类型相同。
示例:
SELECT string_agg(sr_item_sk, ',') FROM tpcds.store_returns where sr_item_sk < 3;
string_agg
---------------------------------------------------------------------------------
------------------------------
1,2,1,2,2,1,1,2,2,1,2,1,2,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,
2,1,1,1,1,1,1,2,2,1,1,2,1,1,1
(1 row)描述:将聚集列数据按WITHIN GROUP指定的排序方式排列,并用delimiter指定的分隔符拼接成一个字符串。
返回类型:text
说明:listagg是兼容Oracle 11g2的列转行聚集函数,可以指定OVER子句用作窗口函数。为了避免与函数本身WITHIN GROUP子句的ORDER BY造成二义性,listagg用作窗口函数时,OVER子句不支持ORDER BY的窗口排序或窗口框架。
示例:
聚集列是文本字符集类型。
SELECT deptno, listagg(ename, ',') WITHIN GROUP(ORDER BY ename) AS employees FROM emp GROUP BY deptno;
deptno | employees
--------+--------------------------------------
10 | CLARK,KING,MILLER
20 | ADAMS,FORD,JONES,SCOTT,SMITH
30 | ALLEN,BLAKE,JAMES,MARTIN,TURNER,WARD
(3 rows)聚集列是整型。
SELECT deptno, listagg(mgrno, ',') WITHIN GROUP(ORDER BY mgrno NULLS FIRST) AS mgrnos FROM emp GROUP BY deptno;
deptno | mgrnos
--------+-------------------------------
10 | 7782,7839
20 | 7566,7566,7788,7839,7902
30 | 7698,7698,7698,7698,7698,7839
(3 rows)聚集列是浮点类型。
SELECT job, listagg(bonus, '($); ') WITHIN GROUP(ORDER BY bonus DESC) || '($)' AS bonus FROM emp GROUP BY job;
job | bonus
------------+-------------------------------------------------
CLERK | 10234.21($); 2000.80($); 1100.00($); 1000.22($)
PRESIDENT | 23011.88($)
ANALYST | 2002.12($); 1001.01($)
MANAGER | 10000.01($); 2399.50($); 999.10($)
SALESMAN | 1000.01($); 899.00($); 99.99($); 9.00($)
(5 rows)聚集列是时间类型。
SELECT deptno, listagg(hiredate, ', ') WITHIN GROUP(ORDER BY hiredate DESC) AS hiredates FROM emp GROUP BY deptno;
deptno | hiredates
--------+------------------------------------------------------------------------------------------------------------------------------
10 | 1982-01-23 00:00:00, 1981-11-17 00:00:00, 1981-06-09 00:00:00
20 | 2001-04-02 00:00:00, 1999-12-17 00:00:00, 1987-05-23 00:00:00, 1987-04-19 00:00:00, 1981-12-03 00:00:00
30 | 2015-02-20 00:00:00, 2010-02-22 00:00:00, 1997-09-28 00:00:00, 1981-12-03 00:00:00, 1981-09-08 00:00:00, 1981-05-01 00:00:00
(3 rows)聚集列是时间间隔类型。
SELECT deptno, listagg(vacationTime, '; ') WITHIN GROUP(ORDER BY vacationTime DESC) AS vacationTime FROM emp GROUP BY deptno;
deptno | vacationtime
--------+------------------------------------------------------------------------------------
10 | 1 year 30 days; 40 days; 10 days
20 | 70 days; 36 days; 9 days; 5 days
30 | 1 year 1 mon; 2 mons 10 days; 30 days; 12 days 12:00:00; 4 days 06:00:00; 24:00:00
(3 rows)分隔符缺省时,默认为空。
SELECT deptno, listagg(job) WITHIN GROUP(ORDER BY job) AS jobs FROM emp GROUP BY deptno;
deptno | jobs
--------+----------------------------------------------
10 | CLERKMANAGERPRESIDENT
20 | ANALYSTANALYSTCLERKCLERKMANAGER
30 | CLERKMANAGERSALESMANSALESMANSALESMANSALESMAN
(3 rows)listagg作为窗口函数时,OVER子句不支持ORDER BY的窗口排序,listagg列为对应分组的有序聚集。
SELECT deptno, mgrno, bonus, listagg(ename,'; ') WITHIN GROUP(ORDER BY hiredate) OVER(PARTITION BY deptno) AS employees FROM emp;
deptno | mgrno | bonus | employees
--------+-------+----------+-------------------------------------------
10 | 7839 | 10000.01 | CLARK; KING; MILLER
10 | | 23011.88 | CLARK; KING; MILLER
10 | 7782 | 10234.21 | CLARK; KING; MILLER
20 | 7566 | 2002.12 | FORD; SCOTT; ADAMS; SMITH; JONES
20 | 7566 | 1001.01 | FORD; SCOTT; ADAMS; SMITH; JONES
20 | 7788 | 1100.00 | FORD; SCOTT; ADAMS; SMITH; JONES
20 | 7902 | 2000.80 | FORD; SCOTT; ADAMS; SMITH; JONES
20 | 7839 | 999.10 | FORD; SCOTT; ADAMS; SMITH; JONES
30 | 7839 | 2399.50 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
30 | 7698 | 9.00 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
30 | 7698 | 1000.22 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
30 | 7698 | 99.99 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
30 | 7698 | 1000.01 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
30 | 7698 | 899.00 | BLAKE; TURNER; JAMES; MARTIN; WARD; ALLEN
(14 rows)描述:总体协方差。
返回类型:double precision
示例:
SELECT COVAR_POP(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
covar_pop
------------------
829.749627587403
(1 row)描述:样本协方差。
返回类型:double precision
示例:
SELECT COVAR_SAMP(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
covar_samp
------------------
830.052235037289
(1 row)描述:总体标准差。
返回类型:对于浮点类型的输入返回double precision,其他输入返回numeric。
示例:
SELECT STDDEV_POP(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
stddev_pop
------------------
289.224294957556
(1 row)描述:样本标准差。
返回类型:对于浮点类型的输入返回double precision,其他输入返回numeric。
示例:
SELECT STDDEV_SAMP(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
stddev_samp
------------------
289.224359757315
(1 row)描述:总体方差(总体标准差的平方)
返回类型:对于浮点类型的输入返回double precision类型,其他输入返回numeric类型。
示例:
SELECT VAR_POP(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
var_pop
--------------------
83650.692793695475
(1 row)描述:样本方差(样本标准差的平方)
返回类型:对于浮点类型的输入返回double precision类型,其他输入返回numeric类型。
示例:
SELECT VAR_SAMP(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
var_samp
--------------------
83650.730277028768
(1 row)描述:所有非NULL输入值的按位与(AND),如果全部输入值皆为NULL,那么结果也为NULL 。
返回类型:和参数数据类型相同。
示例:
SELECT BIT_AND(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
bit_and
---------
0
(1 row)描述:所有非NULL输入值的按位或(OR),如果全部输入值皆为NULL,那么结果也为NULL。
返回类型:和参数数据类型相同
示例:
SELECT BIT_OR(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
bit_or
--------
1023
(1 row)描述:如果所有输入值都是真,则为真,否则为假。
返回类型:bool
示例:
SELECT bool_and(100 <2500); bool_and ---------- t (1 row)
描述:如果所有输入值只要有一个为真,则为真,否则为假。
返回类型:bool
示例:
SELECT bool_or(100 <2500); bool_or ---------- t (1 row)
描述:相关系数
返回类型:double precision
示例:
SELECT CORR(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
corr
-------------------
.0381383624904186
(1 row)描述:等效于bool_and。
返回类型:bool
示例:
SELECT every(100 <2500); every ------- t (1 row)
描述:根据expression对不同组内的元组进行跳跃排序。
返回类型:BIGINT
示例:
SELECT d_moy, d_fy_week_seq, rank() OVER(PARTITION BY d_moy ORDER BY d_fy_week_seq) FROM tpcds.date_dim WHERE d_moy < 4 AND d_fy_week_seq < 7 ORDER BY 1,2;
d_moy | d_fy_week_seq | rank
-------+---------------+------
1 | 1 | 1
1 | 1 | 1
1 | 1 | 1
1 | 1 | 1
1 | 1 | 1
1 | 1 | 1
1 | 1 | 1
1 | 2 | 8
1 | 2 | 8
1 | 2 | 8
1 | 2 | 8
1 | 2 | 8
1 | 2 | 8
1 | 2 | 8
1 | 3 | 15
1 | 3 | 15
1 | 3 | 15
1 | 3 | 15
1 | 3 | 15
1 | 3 | 15
1 | 3 | 15
1 | 4 | 22
1 | 4 | 22
1 | 4 | 22
1 | 4 | 22
1 | 4 | 22
1 | 4 | 22
1 | 4 | 22
1 | 5 | 29
1 | 5 | 29
2 | 5 | 1
2 | 5 | 1
2 | 5 | 1
2 | 5 | 1
2 | 5 | 1
2 | 6 | 6
2 | 6 | 6
2 | 6 | 6
2 | 6 | 6
2 | 6 | 6
2 | 6 | 6
2 | 6 | 6
(42 rows)描述:自变量的平均值 (sum(X)/N)
返回类型:double precision
示例:
SELECT REGR_AVGX(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_avgx
------------------
578.606576740795
(1 row)描述:因变量的平均值 (sum(Y)/N)
返回类型:double precision
示例:
SELECT REGR_AVGY(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_avgy
------------------
50.0136711629602
(1 row)描述:两个表达式都不为NULL的输入行数。
返回类型:bigint
示例:
SELECT REGR_COUNT(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_count
------------
2743
(1 row)描述:根据所有输入的点(X, Y)按照最小二乘法拟合成一个线性方程,然后返回该直线的Y轴截距。
返回类型:double precision
示例:
SELECT REGR_INTERCEPT(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_intercept
------------------
49.2040847848607
(1 row)描述:相关系数的平方
返回类型:double precision
示例:
SELECT REGR_R2(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_r2
--------------------
.00145453469345058
(1 row)描述:根据所有输入的点(X, Y)按照最小二乘法拟合成一个线性方程, 然后返回该直线的斜率。
返回类型:double precision
示例:
SELECT REGR_SLOPE(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_slope
--------------------
.00139920009665259
(1 row)描述:sum(X^2) - sum(X)^2/N (自变量的“平方和”)
返回类型:double precision
示例:
SELECT REGR_SXX(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_sxx
------------------
1626645991.46135
(1 row)描述:sum(X*Y) - sum(X) * sum(Y)/N (自变量和因变量的“乘方积”)
返回类型:double precision
示例:
SELECT REGR_SXY(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_sxy
------------------
2276003.22847225
(1 row)描述:sum(Y^2) - sum(Y)^2/N(因变量的"平方和")
返回类型:double precision
示例:
SELECT REGR_SYY(sr_fee, sr_net_loss) FROM tpcds.store_returns WHERE sr_customer_sk < 1000;
regr_syy
-----------------
2189417.6547314
(1 row)描述:stddev_samp的别名。
返回类型:对于浮点类型的输入返回double precision,其他输入返回numeric。
示例:
SELECT STDDEV(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
stddev
------------------
289.224359757315
(1 row)描述:var_samp的别名。
返回类型:对于浮点类型的输入返回double precision类型,其他输入返回numeric类型。
示例:
SELECT VARIANCE(inv_quantity_on_hand) FROM tpcds.inventory WHERE inv_warehouse_sk = 1;
variance
--------------------
83650.730277028768
(1 row)描述:返回所有输入值的CHECKSUM值。使用该函数可以用来验证GaussDB 200数据库(不支持GaussDB 200之外的其他数据库)的备份恢复或者数据迁移操作前后表中的数据是否相同。在备份恢复或者数据迁移操作前后都需要用户通过手工执行SQL命令的方式获取执行结果,通过对比获取的执行结果判断操作前后表中的数据是否相同。
说明:可以默认转换为TEXT类型的类型包括:char, name, int8, int2, int1, int4, raw, pg_node_tree, float4, float8, bpchar, varchar, nvarchar2, date, timestamp, timestamptz, numeric, smalldatetime,其他类型需要强制转换为TEXT。
返回类型:numeric。
示例:
表中可以默认转为TEXT类型的某列的CHECKSUM值。
SELECT CHECKSUM(inv_quantity_on_hand) FROM tpcds.inventory;
checksum
-------------------
24417258945265247
(1 row)表中不能默认转为TEXT类型的某列的CHECKSUM值。注意此时CHECKSUM参数是列名::TEXT。
SELECT CHECKSUM(inv_quantity_on_hand::TEXT) FROM tpcds.inventory;
checksum
-------------------
24417258945265247
(1 row)表中所有列的CHECKSUM值。注意此时CHECKSUM参数是表名::TEXT,且表名前不加Schema。
SELECT CHECKSUM(inventory::TEXT) FROM tpcds.inventory;
checksum
-------------------
25223696246875800
(1 row)来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3140958/ ,如需转载,请注明出处,否则将追究法律责任。