聚合函数

概览

聚合函数对一组输入行进行计算,并为每个分组生成一个结果。本页中的函数可在 Polars SQL 中使用。

count()count_if()approx_distinct() 外,聚合函数会忽略空输入值;如果没有非空输入值,则返回 null。例如,对于空输入分组,sum() 返回 null 而不是零,avg() 在计数时不包含 null 值。

通用聚合函数

any_value(x) -> [same as input]()

这是 arbitrary() 的别名。

arbitrary(x) -> [same as input]()

如果存在,则返回 x 的任意一个非空值。

avg(x) -> double()

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

SELECT avg(v)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 2.000
count(*) -> bigint()

返回输入行数。

SELECT count(*)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 3
count(x) -> bigint()

返回非空输入值的数量。

SELECT count(v)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 2
count_if(x) -> bigint()

返回 TRUE 输入值的数量。

SELECT count_if(flag)
FROM (VALUES (TRUE), (FALSE), (NULL)) AS t(flag);
-- 1
max(x) -> [same as input]()

返回最大的非空输入值。

SELECT max(v)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 3
min(x) -> [same as input]()

返回最小的非空输入值。

SELECT min(v)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 1
sum(x) -> [same as input]()

返回所有非空输入值的和。

SELECT sum(v)
FROM (VALUES (1), (NULL), (3)) AS t(v);
-- 4

近似聚合函数

approx_distinct(x) -> bigint()

返回不同非空输入值数量的近似值。该函数提供 count(DISTINCT x) 的近似结果。如果所有输入值均为 null,则返回零。

SELECT approx_distinct(v)
FROM (VALUES (1), (1), (2), (NULL)) AS t(v);
-- 2

统计聚合函数

corr(y, x) -> double()

返回非空输入对的相关系数。

SELECT corr(y, x)
FROM (VALUES (1, 2), (3, 4), (5, 6)) AS t(y, x);
-- 1.0
covar_pop(y, x) -> double()

返回非空输入对的总体协方差。

SELECT covar_pop(y, x)
FROM (VALUES (1, 2), (3, 4), (5, 6)) AS t(y, x);
-- 2.6666666666666665
covar_samp(y, x) -> double()

返回非空输入对的样本协方差。

SELECT covar_samp(y, x)
FROM (VALUES (1, 2), (3, 4), (5, 6)) AS t(y, x);
-- 4.0
regr_count(y, x) -> bigint()

返回 yx 均为非空的输入行数。y 是因变量,x 是自变量。

regr_avgx(y, x) -> double()

返回非空输入对中自变量的平均值。

regr_avgy(y, x) -> double()

返回非空输入对中因变量的平均值。

regr_sxx(y, x) -> double()

返回非空输入对中自变量的平方和。

regr_syy(y, x) -> double()

返回非空输入对中因变量的平方和。

regr_sxy(y, x) -> double()

返回非空输入对中因变量和自变量乘积的总和。

regr_slope(y, x) -> double()

返回线性回归直线的斜率。y 是因变量,x 是自变量。

regr_intercept(y, x) -> double()

返回线性回归直线的截距。y 是因变量,x 是自变量。

regr_r2(y, x) -> double()

返回线性回归的决定系数。

SELECT
    regr_count(y, x),
    regr_avgx(y, x),
    regr_avgy(y, x),
    regr_sxx(y, x),
    regr_syy(y, x),
    regr_sxy(y, x),
    regr_slope(y, x),
    regr_intercept(y, x),
    regr_r2(y, x)
FROM (
    VALUES
        (1, 2),
        (3, 4),
        (5, 6),
        (CAST(NULL AS INTEGER), 8),
        (9, CAST(NULL AS INTEGER))
) AS t(y, x);
-- 3, 4.0, 3.0, 8.0, 8.0, 8.0, 1.0, -1.0, 1.0
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()

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

SELECT
    var_pop(v),
    stddev_pop(v),
    var_samp(v),
    variance(v),
    stddev_samp(v),
    stddev(v)
FROM (VALUES (1), (2), (3)) AS t(v);
-- 0.6666666666666666, 0.816496580927726, 1.0, 1.0, 1.0, 1.0