聚合函数(Aggregate Functions)
聚合函数(aggregate function)对一组值进行运算,从而计算出一个结果。
常规函数(General Functions)
- array_agg
- avg
- bit_and
- bit_or
- bit_xor
- bool_and
- bool_or
- count
- first_value
- grouping
- last_value
- max
- mean
- median
- min
- string_agg
- sum
- var
- var_pop
- var_population
- var_samp
- var_sample
array_agg
返回由表达式元素构成的数组。如果需要排序,元素会按指定的顺序插入。 仅当排序表达式与参数表达式完全相同时,该聚合函数才能同时使用 DISTINCT 和 ORDER BY。
array_agg(expression [ORDER BY expression])
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT array_agg(column_name ORDER BY other_column) FROM table_name;
+-----------------------------------------------+
| array_agg(column_name ORDER BY other_column) |
+-----------------------------------------------+
| [element1, element2, element3] |
+-----------------------------------------------+
> SELECT array_agg(DISTINCT column_name ORDER BY column_name) FROM table_name;
+--------------------------------------------------------+
| array_agg(DISTINCT column_name ORDER BY column_name) |
+--------------------------------------------------------+
| [element1, element2, element3] |
+--------------------------------------------------------+
avg
返回指定列中数值的平均值。
avg(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT avg(column_name) FROM table_name;
+---------------------------+
| avg(column_name) |
+---------------------------+
| 42.75 |
+---------------------------+
别名
- mean
bit_and
计算所有非空输入值的按位与(bitwise AND)。
bit_and(expression)
参数
- expression: 要操作的整数表达式。可以是常量、列或函数,以及任意运算符的组合。
bit_or
计算所有非空输入值的按位或(bitwise OR)。
bit_or(expression)
参数
- expression: 要操作的整数表达式。可以是常量、列或函数,以及任意运算符的组合。
bit_xor
计算所有非空输入值的按位异或(bitwise XOR)。
bit_xor(expression)
参数
- expression: 要操作的整数表达式。可以是常量、列或函数,以及任意运算符的组合。
bool_and
如果所有非空输入值都为 true,则返回 true,否则返回 false。
bool_and(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT bool_and(column_name) FROM table_name;
+----------------------------+
| bool_and(column_name) |
+----------------------------+
| true |
+----------------------------+
bool_or
如果任意一个非空输入值为 true,则返回 true,否则返回 false。
bool_and(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT bool_and(column_name) FROM table_name;
+----------------------------+
| bool_and(column_name) |
+----------------------------+
| true |
+----------------------------+
count
返回指定列中非空值的数量。若要在总数中包含空值,请使用 count(*)。
count(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT count(column_name) FROM table_name;
+-----------------------+
| count(column_name) |
+-----------------------+
| 100 |
+-----------------------+
> SELECT count(*) FROM table_name;
+------------------+
| count(*) |
+------------------+
| 120 |
+------------------+
first_value
根据所请求的排序返回聚合组中的第一个元素。如果未给出排序,则返回组中的任意一个元素。
first_value(expression [ORDER BY expression])
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT first_value(column_name ORDER BY other_column) FROM table_name;
+-----------------------------------------------+
| first_value(column_name ORDER BY other_column)|
+-----------------------------------------------+
| first_element |
+-----------------------------------------------+
grouping
如果数据按指定列进行了聚合,则返回 1;如果结果集中未按该列聚合,则返回 0。
grouping(expression)
参数
- expression: 用于求值数据是否按指定列聚合的表达式。可以是常量、列或函数。
示例
> SELECT column_name, GROUPING(column_name) AS group_column
FROM table_name
GROUP BY GROUPING SETS ((column_name), ());
+-------------+-------------+
| column_name | group_column |
+-------------+-------------+
| value1 | 0 |
| value2 | 0 |
| NULL | 1 |
+-------------+-------------+
last_value
根据所请求的排序返回聚合组中的最后一个元素。如果未给出排序,则返回组中的任意一个元素。
last_value(expression [ORDER BY expression])
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT last_value(column_name ORDER BY other_column) FROM table_name;
+-----------------------------------------------+
| last_value(column_name ORDER BY other_column) |
+-----------------------------------------------+
| last_element |
+-----------------------------------------------+
max
返回指定列中的最大值。
max(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT max(column_name) FROM table_name;
+----------------------+
| max(column_name) |
+----------------------+
| 150 |
+----------------------+
mean
avg 的别名。
median
返回指定列中的中位数。
median(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT median(column_name) FROM table_name;
+----------------------+
| median(column_name) |
+----------------------+
| 45.5 |
+----------------------+
min
返回指定列中的最小值。
min(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT min(column_name) FROM table_name;
+----------------------+
| min(column_name) |
+----------------------+
| 12 |
+----------------------+
string_agg
将字符串表达式的值连接起来,并在它们之间放置分隔符。
string_agg(expression, delimiter)
参数
- expression: 要连接的字符串表达式。可以是列或任何有效的字符串表达式。
- delimiter: 用作连接值之间分隔符的字面量字符串。
示例
> SELECT string_agg(name, ', ') AS names_list
FROM employee;
+--------------------------+
| names_list |
+--------------------------+
| Alice, Bob, Charlie |
+--------------------------+
sum
返回指定列中所有值的总和。
sum(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT sum(column_name) FROM table_name;
+-----------------------+
| sum(column_name) |
+-----------------------+
| 12345 |
+-----------------------+
var
返回一组数值的统计样本方差(sample variance)。
var(expression)
参数
- expression: 要操作的数值表达式。可以是常量、列或函数,以及任意运算符的组合。
别名
- var_sample
- var_samp
var_pop
返回一组数值的统计总体方差(population variance)。
var_pop(expression)
参数
- expression: 要操作的数值表达式。可以是常量、列或函数,以及任意运算符的组合。
别名
- var_population
var_population
var_pop 的别名。
var_samp
var 的别名。
var_sample
var 的别名。
统计函数(Statistical Functions)
- corr
- covar
- covar_pop
- covar_samp
- nth_value
- regr_avgx
- regr_avgy
- regr_count
- regr_intercept
- regr_r2
- regr_slope
- regr_sxx
- regr_sxy
- regr_syy
- stddev
- stddev_pop
- stddev_samp
corr
返回两个数值之间的相关系数。
corr(expression1, expression2)
参数
- expression1: 要操作的第一个表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression2: 要操作的第二个表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT corr(column1, column2) FROM table_name;
+--------------------------------+
| corr(column1, column2) |
+--------------------------------+
| 0.85 |
+--------------------------------+
covar
covar_samp 的别名。
covar_pop
返回一组数字对的总体协方差(population covariance)。
covar_samp(expression1, expression2)
参数
- expression1: 要操作的第一个表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression2: 要操作的第二个表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT covar_samp(column1, column2) FROM table_name;
+-----------------------------------+
| covar_samp(column1, column2) |
+-----------------------------------+
| 8.25 |
+-----------------------------------+
covar_samp
返回一组数字对的样本协方差(sample covariance)。
covar_samp(expression1, expression2)
参数
- expression1: 要操作的第一个表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression2: 要操作的第二个表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT covar_samp(column1, column2) FROM table_name;
+-----------------------------------+
| covar_samp(column1, column2) |
+-----------------------------------+
| 8.25 |
+-----------------------------------+
别名
- covar
nth_value
返回一组值中的第 n 个值。
nth_value(expression, n ORDER BY expression)
参数
- expression: 要从中获取第 n 个值的列或表达式。
- n: 要获取的值按排序所处的位置(第 n 个)。
示例
> SELECT dept_id, salary, NTH_VALUE(salary, 2) OVER (PARTITION BY dept_id ORDER BY salary ASC) AS second_salary_by_dept
FROM employee;
+---------+--------+-------------------------+
| dept_id | salary | second_salary_by_dept |
+---------+--------+-------------------------+
| 1 | 30000 | NULL |
| 1 | 40000 | 40000 |
| 1 | 50000 | 40000 |
| 2 | 35000 | NULL |
| 2 | 45000 | 45000 |
+---------+--------+-------------------------+
regr_avgx
对非空的配对数据点计算自变量(输入)expression_x 的平均值。
regr_avgx(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_avgy
对非空的配对数据点计算因变量(输出)expression_y 的平均值。
regr_avgy(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_count
统计非空配对数据点的数量。
regr_count(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_intercept
计算线性回归直线的 y 截距。对于方程 (y = kx + b),该函数返回 b。
regr_intercept(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_r2
计算自变量与因变量之间相关系数的平方。
regr_r2(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_slope
返回聚合列中非空配对数据点的线性回归直线斜率。给定输入列 Y 和 X:regr_slope(Y, X) 使用最小 RSS 拟合返回斜率(Y = k*X + b 中的 k)。
regr_slope(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_sxx
计算自变量的平方和。
regr_sxx(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_sxy
计算配对数据点的乘积之和。
regr_sxy(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
regr_syy
计算因变量的平方和。
regr_syy(expression_y, expression_x)
参数
- expression_y: 要操作的因变量表达式。可以是常量、列或函数,以及任意运算符的组合。
- expression_x: 要操作的自变量表达式。可以是常量、列或函数,以及任意运算符的组合。
stddev
返回一组数值的标准差。
stddev(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT stddev(column_name) FROM table_name;
+----------------------+
| stddev(column_name) |
+----------------------+
| 12.34 |
+----------------------+
别名
- stddev_samp
stddev_pop
返回一组数值的总体标准差(population standard deviation)。
stddev_pop(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT stddev_pop(column_name) FROM table_name;
+--------------------------+
| stddev_pop(column_name) |
+--------------------------+
| 10.56 |
+--------------------------+
stddev_samp
stddev 的别名。
近似函数(Approximate Functions)
approx_distinct
返回使用 HyperLogLog 算法计算的去重输入值的近似数量。
approx_distinct(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT approx_distinct(column_name) FROM table_name;
+-----------------------------------+
| approx_distinct(column_name) |
+-----------------------------------+
| 42 |
+-----------------------------------+
approx_median
返回输入值的近似中位数(第 50 百分位数)。它是 approx_percentile_cont(x, 0.5) 的别名。
approx_median(expression)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
示例
> SELECT approx_median(column_name) FROM table_name;
+-----------------------------------+
| approx_median(column_name) |
+-----------------------------------+
| 23.5 |
+-----------------------------------+
approx_percentile_cont
使用 t-digest 算法返回输入值的近似百分位数。
approx_percentile_cont(expression, percentile, centroids)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
- percentile: 要计算的百分位数。必须是 0 到 1 之间(含边界)的浮点值。
- centroids: t-digest 算法使用的质心数量。默认为 100。数值越大,近似越精确,但需要更多内存。
示例
> SELECT approx_percentile_cont(column_name, 0.75, 100) FROM table_name;
+-------------------------------------------------+
| approx_percentile_cont(column_name, 0.75, 100) |
+-------------------------------------------------+
| 65.0 |
+-------------------------------------------------+
approx_percentile_cont_with_weight
使用 t-digest 算法返回输入值的加权近似百分位数。
approx_percentile_cont_with_weight(expression, weight, percentile)
参数
- expression: 要操作的表达式。可以是常量、列或函数,以及任意运算符的组合。
- weight: 用作权重的表达式。可以是常量、列或函数,以及任意算术运算符的组合。
- percentile: 要计算的百分位数。必须是 0 到 1 之间(含边界)的浮点值。
示例
> SELECT approx_percentile_cont_with_weight(column_name, weight_column, 0.90) FROM table_name;
+----------------------------------------------------------------------+
| approx_percentile_cont_with_weight(column_name, weight_column, 0.90) |
+----------------------------------------------------------------------+
| 78.5 |
+----------------------------------------------------------------------+