聚合函数具有如下特点:

  • 输入一个数据集
  • 输出一个单一的计算结果

绝大部分聚合函数都会在计算时忽略null值,并且在输入为空或均为null时,返回null。但也有例外,如下几个聚合函数:

  • count
  • count_if
  • max_by
  • min_by
  • approx_distinct

基本聚合函数

函数 语法 说明
arbitrary arbitrary(x) → [same as input] 随机返回 x 中的一个非 null 值
array_agg array_agg(x) → array<[same as input]> 从输入的元素中创建数组
avg avg(x) → double 求算术平均值
avg avg(time interval type) → time interval type 计算输入时间序列的平均时间间隔
bool_and bool_and(boolean) → boolean 如果所有输入的值都为 TRUE,则返回 TRUE,否则返回FALSE
bool_or bool_or(boolean) → boolean 如果输入的序列中有一个为 True ,则返回 True ,否则返回 False
checksum checksum(x) → varbinary 返回 x 的校验和(顺序不敏感)
count count(*) → bigint 返回行数
count count(x) → bigint 返回非 null 元素的个数
count_if count_if(x) → bigint 返回 x 中元素为True 的个数,等同于count(CASE WHEN x THEN 1 END).
every every(boolean) → boolean bool_and
geometric_mean geometric_mean(x) → double 返回 x 的几何平均值
max_by max_by(x, y) → [same as x] 返回与 y 的最大值相关的 x 值
max_by max_by(x, y, n) → array<[same as x]> 返回与 y 的前 n 个最大值相关的 x 值的数组
min_by min_by(x, y) → [same as x] 返回与 y 的最小值相关的 x 值
min_by min_by(x, y, n) → array<[same as x]> 返回与 y 的前 n 个最小值相关的 x 值的数组
max max(x) → [same as input] 返回最大值
max max(x, n) → array<[same as x]> 返回前 n 个最大值列表
min min(x) → [same as input] 返回最小值
min min(x, n) → array<[same as x]> 返回前 n 个最小值列表
sum sum(x) → [same as input] 求和

位聚合函数

位聚合函数参见位运算函数中介绍的bitwise_and_aggbitwise_or_agg函数。

Map 聚合函数

函数 语法 说明
histogram histogram(x) → map<K,bigint> 统计直方图
map_agg map_agg(key, value) → map<K,V> 创建一个MAP类型的变量
map_union map_union(x<K, V>) → map<K,V> 返回输入map列表的 Union 结果,如果有多个 map 对象包含相同的key,最终的结果中,对于 key 的 value 随机的从输入的 map 中选取。
multimap_agg multimap_agg(key, value) → map<K,array> 创建一个多重映射的MAP变量

近似聚合函数

函数 语法 说明
approx_distinct approx_distinct(x, [e]) → bigint 返回输入列表中不重复的值的个数。本函数返回的是count(DISTINCT x)的近似值,如果所有值都是 null,则返回 0。e为期望标准差的上界,可选,默认为 2.3%,当前的实现方式对e的取值范围有约束,要求在[0.01150, 0.26000]之间。对于特定对输入,不保证误差上界。
approx_percentile approx_percentile(x, percentage) → [same as x] 估计序列 x 中位于第百分之 percentage 位的数值
approx_percentile approx_percentile(x, percentages) → array<[same as x]> 类似上面,percentages 为数组,返回值与之一一对应。
approx_percentile approx_percentile(x, w, percentage) → [same as x] 类似上面,w为x的权值。
approx_percentile approx_percentile(x, w, percentage, accuracy) → [same as x] 类似上面,accuracy为预估精度的上线,取值范围为[0, 1].
approx_percentile approx_percentile(x, w, percentages) → array<[same as x]> 类似上面,percentages为数组,返回值与之一一对应.
numeric_histogram numeric_histogram(buckets, value, [weight]) → map<double, double> 按给定的桶数计算数值直方图。buckets必须是BIGINT类型, valueweight 必须是数值类型。权重列表weight可选,默认为1。

统计聚合函数

函数 语法 说明
corr corr(y, x) → double 计算相关系数
covar_pop covar_pop(y, x) → double 计算总体协方差
covar_samp covar_samp(y, x) → double 计算样本协方差
kurtosis kurtosis(x) → double 计算超值峰度. 使用下列表达式进行无偏估计:
kurtosis(x) =
              n(n+1)/((n-1)(n-2)(n-3))sum[(x_i-mean)^4]/sttdev(x)^4-3(n-1)^2/((n-2)(n-3))
regr_intercept regr_intercept(y, x) → double 计算线性回归截距. y为相关变量. x为独立变量.
regr_slope regr_slope(y, x) → double 计算线性回归斜率。y为相关变量. x为独立变量。
skewness skewness(x) → double 计算偏度。
sttdev_pop sttdev_pop(x) → double 计算总体标准差。
sttdev_samp sttdev_samp(x) → double 计算样本标准差。
sttdev sttdev(x) → double 计算标准差,同sttdev_samp
var_pop var_pop(x) → double 计算总体方差。
var_samp var_samp(x) → double 计算样本方差。
variance variance(x) → double var_samp