聚合函数主要应用于一组数据计算出一个结果。

除了 count(), count_if(), max_by(), min_by() 和 approx_distinct() 之外, 所有这些聚合函数均会忽略null值并且在没有输入数据或者所有数据 均是null值的情况下返回空结果。比如,sum() 会返回null而不是0, 以及 avg() 不会包含null值计数。 coalesce 函数会把null值转换成0。

arbitrary(x) → [类型与输入参数相同]

返回 x 的任意非null值。

array_agg(x) → array<[类型和输入参数相同]>

返回以输入参数 x 为元素的数组。

avg(x) → double

返回所有输入值的平均数(算数平均数)。

bool_and(boolean) → boolean

只有所有参数均为 TRUE 则返回 TRUE ,否则返回 FALSE 。

bool_or(boolean) → boolean

任何一个参数为 TRUE ,则返回 TRUE , 否则返回 FALSE 。

checksum(x) → varbinary

返回不受给定参数值顺序影响的校验值。

count(*) → bigint

返回输入数据行的统计个数。

count(x) → bigint

返回非null值的输入参数个数。

count_if(x) → bigint

返回输入参数中 TRUE 的个数。 这个函数和 count(CASE WHEN x THEN 1 END) 等同。

every(boolean) → boolean

这个函数是 bool_and() 的别名。

geometric_mean(x) → double

返回所有输入参数的几何平均值。

max_by(x, y) → [与x类型相同]

返回 x 与 y 的全部关联中,y 最大值所关联的第一个 x 值。

max_by(x, y, n) → array<[与x类型相同]>

x 与 y 的全部关联中, 以 y 降序排列前 n 个最大值所关联的 x 值中, 返回前 n 个值

min_by(x, y) → [与x类型相同]

返回 x 与 y 的全部关联中,y 最小值所关联的第一个 x 值。

min_by(x, y, n) → array<[与x类型相同]>

x 与 y 的全部关联中, 以 y 升序排列前 n 个值所关联的 x 值中, 返回前 n 个值

max(x) → [与输入类型相同]

返回输入参数中最大的值。

max(x, n) → array<[与x类型相同]>

返回所有参数 x 中前 n 大的值.

min(x) → [与输入类型相同]

返回所有输入参数中最小的值。

min(x, n) → array<[与x类型相同]>

返回所有输入参数 x 中,前 n 小的值。

sum(x) → [和输入类型相同]

返回所有输入参数的和。

位聚合函数

bitwise_and_agg(x) → bigint

返回所有输入值二进制与的结果,以二进制补码表示。

bitwise_or_agg(x) → bigint

返回所有输入值二进制或的结果,以二进制补码表示。

映射表聚合函数

histogram(x) → map<K,bigint>

返回一个包含输入参数出现次数的映射表。

map_agg(key, value) → map<K,V>

返回一个根据输入 key 和 value 对构造的映射表。

map_union(x<K, V>)map<K,V>

返回所有输入映射表的联合。如果一个键同时出现在多个输入映射表中,结果中对应键值会取任意输入映射表中的一个。

multimap_agg(key, value) → map<K,array<V>>

返回一个由输入参数 key 和 value 对组成的映射表。每个键可以对应多个值。

近似计算聚合函数

approx_distinct(x) → bigint

返回输入参数中不重复值的近似个数。 这个函数提供 count(DISTINCT x) 这个方法的近似计算。 如果所有输入参数均为null,则返回0。

这个函数会产生2.3%的标准误差。这个误差是基于所有可能集合上的标准误差的正常分布。 它并不能保证在特定集合上的误差上限。

approx_distinct(x, e) → bigint

返回输入参数中不重复值的近似个数。 这个函数提供 count(DISTINCT x) 这个方法的近似计算。 如果所有输入参数均为null,则返回0。

这个函数会产生一个标准误差不会超过 e 的结果。这个误差是基于所有可能集合上的标准误差的正常分布。 它并不能保证在特定集合上的误差上限。当前这个函数的实现需要 e 值在范围[0.01150, 0.26000]之间。

approx_percentile(x, percentage) → [与x类型相同]

返回输入值 x 中处于percentage占比的近似百分位数值。 percentage的数值范围必须在0到1之间且对每个输入行均是常量。如近似计算中位数为 approx_percentile(x, 0.5) 。

approx_percentile(x, percentages) → array<[与x类型相同]>

返回输入值x中处于每个特定百分占比的近似百分位值。其中percentages数组中每个元素值范围必须在0到1且数组对每个输入行必须是常数。

approx_percentile(x, w, percentage) → [与x类型相同]

按照百分比 percentage 的每项权重 w 返回 x 的所有输入值的近似百分位数。权重必须至少有一个整型数值。 它实际上是百分位数集合中的值 x 的复制计数。 percentage 的值必须在0和1之间且对所有输入行必须是常数。

approx_percentile(x, w, percentage, accuracy) → [与x类型相同]

按照百分比 percentage 的每项权重 w 计算所有 x 的输入值的近似百分位数,以精度为accuracy。权重必须至少有一个整型数值。它实际上是百分位数集合中的值 x 的复制计数。percentage 的值必须在0和1之间且对所有输入行必须是常数。 accuracy 必须要大于0并且小于1并且对于所有输入行为常量。

approx_percentile(x, w, percentages) → array<[与x类型相同]>

按照百分比 percentage 的每个项目权重 w 返回 x 的所有输入值的近似称重百分位数。 权重必须至少有一个整型数值。它实际上是百分位数集合中的值 x 的复制计数。percentages的每个值必须在0和1之间且对所有输入行必须是常数。

numeric_histogram(buckets, value, weight) → map<double, double>

按照 buckets 桶的数量,为所有的 value 计算近似直方图, 每一项的权重使用 weight 。本算法大体基于:

Yael Ben-Haim and Elad Tom-Tov, "A streaming parallel decision tree algorithm", J. Machine Learning Research 11 (2010), pp. 849--872.

buckets 必须是 bigint 类型. value 和 weight 必须是数值类型。

numeric_histogram(buckets, value) → map<double, double>按照 buckets 桶的数量,为所有的 value 计算近似直方图,本函数与 numeric_histogram() 相同,只是 weight 为1.

统计聚合函数

corr(y, x) → double

返回输入值的相关系数。

covar_pop(y, x) → double

返回输入值的总体协方差。

covar_samp(y, x) → double

返回输入值的样本协方差。

regr_intercept(y, x) → double

返回输入值的线性回归截距。 y 是因变量。 x 是自变量。

regr_slope(y, x) → double

返回输入值的线性回归斜率。 y 是因变量。 x 是自变量。

stddev(x) → double

这个函数是 stddev_samp() 的别名函数。

stddev_pop(x) → double

返回所有输入值的总体标准偏差。

stddev_samp(x) → double

返回所有输入值的样本标准偏差。

variance(x) → double

这个函数是 var_samp() 的别名函数

var_pop(x) → double

返回所有输入值的总体方差。

var_samp(x) → double

返回所有输入值的样本方差。

特色聚合函数

group_concat

字符串聚合函数。

语法:GROUP_CONCAT(expr [,expr …])

默认是逗号分隔字段。