聚集函数

更新时间:

云原生数据仓库 AnalyticDB PostgreSQL 版兼容PostgreSQL中的聚集函数。本文简单列举云原生数据仓库 AnalyticDB PostgreSQL 版兼容的聚集函数及用法示例。

更多信息请参见PostgreSQL官方文档:聚集函数

聚集函数

简介

聚集函数是指对一组数据执行计算并返回一定计算结果的函数。通常用于数据库中,对多个输入行进行计算,从而实现统计数据的目的。例如:计算平均值、最大值、总数等。应该注意的是,除了count之外,当没有输入行时,这些函数返回空值,而不是零。且当没有输入行时,array_agg返回null而不是空数组。必要时,可以使用coalesce函数将零或空数组替换为null

通用聚集函数

函数

参数类型

返回类型

描述

array_agg()

非数组类型,不建议临时使用row()包装后的类型作为输入。

与参数数据类型相同。

输入值(包括空值)被连接到一个数组。

array_agg()

任意数组类型。

与参数数据类型相同。

输入的数组被连接到一个更高维的数组中 (输入必须都具有相同的维度且不能为空或NULL)。

avg()

smallintintbigintrealdouble precisionnumericinterval

对于整数类型参数返回numeric,对于浮点类型参数返回double precision,否则和参数数据类型相同。

所有非空输入值的平均值(即算术平均)。

bit_and()

smallintintbigintbit

与参数数据类型相同。

所有非空输入值的按位与。当没有非空值时结果是空值。

bit_or()

smallintintbigintbit

与参数数据类型相同。

所有非空输入值的按位或。当没有非空值时结果是空值。

bool_and()

bool

bool

当所有输入值为真则结果为真,否则为假。

bool_or()

bool

bool

至少存在一个输入值为真时结果为真,否则为假。

count(*)

-

bigint

输入的行数。

count()

any

bigint

非空的输入行的数目。

every()

bool

bool

等同于bool_and

json_agg()

any

json

将值(含空值)聚集成一个JSON数组。

jsonb_agg()

any

jsonb

把值(含空值)聚集成一个JSON数组。

json_object_agg(name,value)

(any, any)

json

name/value对聚集成一个JSON对象。值可为空,但不能是name。

jsonb_object_agg(name,value)

(any, any)

jsonb

name/value对聚集成一个JSON对象,值可为空,但不能是name。

max()

任意数组、数字、字符串、日期或时间、网络或枚举类型,或这些类型的数组。

与参数数据类型相同。

所有非空输入值中的最大值。

min()

任意数组、数字、字符串、日期或时间、网络或枚举类型,或这些类型的数组。

与参数数据类型相同。

所有非空输入值中的最小值。

string_agg(expression,delimiter)

(text,text) 或 (bytea,bytea)。

与参数数据类型相同。

将非空输入值连成一个字符串,用分隔符分隔。

sum()

smallintintbigintrealdouble precisionnumericintervalmoney

smallintint参数返回bigint,对bigint参数返回numeric,否则返回类型与参数数据类型相同。

所有非空输入值的和。

xmlagg()

xml

xml

连接非空XML值。

统计相关的聚集函数

函数

参数类型

返回类型

描述

corr(Y,X)

double precision

double precision

相关系数。

covar_pop(Y,X)

double precision

double precision

总体协方差。

covar_samp(Y,X)

double precision

double precision

样本协方差。

regr_avgx(Y,X)

double precision

double precision

自变量的平均值 sum(X)/N

regr_avgy(Y,X)

double precision

double precision

因变量的平均值 sum(Y)/N

regr_count(Y,X)

double precision

bigint

两个表达式均不为空的行的数目。

regr_intercept(Y,X)

double precision

double precision

由(X,Y)进行最小二乘拟合线性方程的Y截距。

regr_r2(Y,X)

double precision

double precision

相关系数的平方。

regr_slope(Y,X)

double precision

double precision

由(X,Y)进行最小二乘拟合的线性方程的斜率。

regr_sxx(Y,X)

double precision

double precision

sum(X^2) - sum(X)^2/N(自变量的平方和)。

regr_sxy(Y,X)

double precision

double precision

sum(X*Y) - sum(X) * sum(Y)/N(自变量乘因变量的积之和)。

regr_syy(Y,X)

double precision

double precision

sum(Y^2) - sum(Y)^2/N(因变量的平方和)。

stddev()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

stddev_samp的别名。

stddev_pop()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

总体标准差。

stddev_samp()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

样本标准差。

variance()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

var_samp的别名。

var_pop()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

总体方差(总体标准差的平方)。

var_samp()

smallintintbigintrealdouble precisionnumeric

浮点类型参数为double precision,否则为numeric

样本方差(样本标准差的平方)。