聚合函数 ============ *聚合函数* 从一组输入值里计算一个结果。 *表.通用聚合函数* 和 *表.统计聚合函数* 显示了内建的聚合函数。聚合函数的特殊语法在 `聚合表达式 <./sql-value-expressions.html#id9>`_ 里解释。 **表.通用聚合函数** .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 参数类型 - 返回类型 - 描述 * - avg(expression) - smallint, int, bigint, real, double precision, numeric, or interval - 对于任何整数类型参数,结果都是numeric类型。 对于任何浮点参数,结果都是double precision类型。 否则和参数数据类型相同。 - 所有输入值的均值(算术平均) * - bit_and(expression) - smallint, int, bigint, or bit - 与参数数据类型相同 - 所有非 NULL 输入值的按位与(AND),如果全部输入值皆为 NULL ,那么结果也为 NULL 。 * - bit_or(expression) - smallint, int, bigint, or bit - 与参数数据类型相同 - 所有非 NULL 输入值的按位或(OR),如果全部输入值皆为 NULL ,那么结果也为 NU LL 。 * - bool_and(expression) - bool - bool - 如果所有输入值都是真,则为真,否则为假。 * - bool_or(expression) - bool - bool - 如果至少有一个输入值为真,则为真,否则为假。 * - count(*) - \ - bigint - 输入行数 * - count(expression) - 任意 - bigint - 计算所有输入行中满足expression不为 NULL 的行数。 * - every(expression) - bool - bool - 等价于bool_and * - max(expression) - 任意数组、数值、字符串或日期/时间类型 - 与参数类型相同 - 所有输入行中expression的最大值 * - min(expression) - 任意数组、数值、字符串或日期/时间类型 - 与参数类型相同 - 所有输入行中expression的最小值 * - sum(expression) - smallint, int, bigint, real, double precision, numeric, or interval - 对于smallint或int输入,输出类型为bigint;对于bigint输入, 输出类型为numeric;对于浮点数输入,输出类型为double precision ;否则和输入数据类型相同。 - 所有输入行的expression总和 请注意,除了count以外,这些函数在没有输入行时返回 NULL 。 尤其要指出的是sum函数在没有输入行时返回 NULL ,而不是零。必要时可以用coalesce把 NULL 替换成零或空数组。 下表显示了用于统计分析的聚合函数。(单独列出这些函数仅仅是为了避免和那些经常使用的聚合函数混在一起而已。) "描述"列中的N 表示所有输入行中使得输入表达式不为 NULL 的行数。如果计算本身变得没有意义, 那么返回值将是 NULL 。例如当N为零的时候。 **表.统计聚合函数** .. list-table:: :widths: auto :header-rows: 1 * - 函数 - 参数类型 - 返回类型 - 描述 * - covar_pop(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_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_pop(expression) - smallint, int, bigint, real, double precision, or numeric - 对于浮点类型的输入返回double precision,其他输入返回numeric - 总体标准差 * - stddev_samp(expression) - smallint, int, bigint, real, double precision, or numeric - 对于浮点类型的输入返回double precision,其他输入返回numeric - 样本标准差 * - variance(expression) - smallint, int, bigint, real, double precision, or numeric - 对于浮点类型的输入返回double precision,其他输入返回numeric - var_samp的别名(历史原因) * - var_pop(expression) - smallint, int, bigint, real, double precision, or numeric - 对于浮点类型的输入返回double precision,其他输入返回numeric - 总体方差(总体标准差的平方) * - var_samp(expression) - smallint, int, bigint, real, double precision, or numeric - 对于浮点类型的输入返回double precision,其他输入返回numeric - 样本方差(样本标准差的平方)