Skip to content

聚合函数

聚合函数是指对一组数值进行统计计算,返回一个单一的数值结果。本文先准备一张表,接下来的函数介绍例子就使用这张表给计算结果。

f1f2f3
102030
203040
30null50
405060
506070
6070null

avg

语法avg(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述获取指定数值列的平均值
例子avg({f1}), 返回值 35

corr

语法corr(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述返回两个数字列的相关系数
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)], corr({arg1}, {arg2}), 返回 1

count

语法count(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型数字
描述获取指定列的值的数目
例子count({f2}),返回:5(不统计null值)

covar_pop

语法covar_pop(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述返回两个数字列的总体协方差
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)], covar_pop({arg1}, {arg2}),返回 138058.47222222222

covar_samp

语法covar_samp(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述返回两个数字列的样本协方差
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1001)], covar_samp(arg1, arg2), 返回 165670.16666666666

distinct_count

语法distinct_count(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型数字
描述获取指定列中非重复结果的数目
例子distinct_count({f2}),返回:5
不支持的数据源

first

语法first(ARG)
参数说明参与计算的参数,可选类型:ANY
返回值类型ANY
描述获取指定列中第一个记录的值,它的值不是固定的
例子first({f1}),返回:10

last

语法last(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型任意类型
描述获取指定列中最后一个记录的值,它的值不是固定的
例子last({f1}),返回:60

list_collect

语法list_collect(ARG)
参数说明参与计算的参数,可选类型:任意
返回值类型数组
描述聚合函数,把 arg 的参数收集为数组。(返回格式为数组类型,如果您发现显示为null,可以尝试将其转为字符串类型查看。)
例子list_collect({f1}),返回:包含 f1 字段所有值的数组

list_collect_flatten

语法list_collect_flatten(ARR)
参数说明数组类型参数,可选类型:数组
返回值类型数组
描述聚合函数,把 arr 的参数收集打平为数组。(返回格式为数组类型,如果您发现显示为null,可以尝试将其转为字符串类型查看。)
例子list_collect_flatten({f1}),返回:把 f1 数组的所有元素拿出来,拼成一个新的数组。

max

语法max(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型任意类型
描述获取指定数值列的最大值
例子max({f1}),返回:60
不支持的数据源

max_by

语法max_by(ARG, COMPARE)
参数说明1. 参与计算的参数,可选类型:任意类型;
2. 对比数值,可选类型:任意类型
返回值类型任意类型
描述获取 compare 列最大那行对应的 arg 列的值,如有多个最大值取随机一个
例子max_by({f1},if(isnull({f2}),-1,{f2})),返回:60

median

语法median(ARG)
参数说明数值类型参数,可选类型:数字
返回值类型数字
描述获取指定数值列的中位数
例子median({f1}),返回:35

min

语法min(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型任意类型
描述获取指定数值列的最小值
例子min({f1}),返回:10

min_by

语法min_by(ARG, COMPARE)
参数说明1. 参与计算的参数,可选类型:任意类型;
2. 对比数值,可选类型:任意类型
返回值类型任意类型
描述获取 compare 列最小那行对应的 arg 列的值,如有多个最小值取随机一个
例子min_by({f1},{f2}),返回:10

mode

语法mode() within group(ORDER BY expr2 [ DESC ] )
参数说明expr2:用于排序的表达式,可选类型:ANY;
DESC:可选参数,指定按降序排序,默认升序
返回值类型ANY
描述返回出现频次最高的一个值,频次相同则返回第一个
例子对于数据 [1, 2, 2, 3, 3],mode() within group(ORDER BY value) 返回:2(2和3频次相同,返回先出现的2)

nth

语法nth(ARG, I)
参数说明1. 参与计算的参数,可选类型:任意类型;
2. 整数类型参数,可选类型:数字
返回值类型任意类型
描述获取第 i 个数值
例子nth({f1}, 2),返回:30(索引从1开始时)

percentile

语法percentile(ARG, P)
参数说明1. 数值类型参数,可选类型:数字;
2. 小数,0-1之间,可选类型:数字
返回值类型数字
描述计算百分位数
例子percentile({f1}, 50),返回:30)

regr_avgx

语法regr_avgx(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述返回自变量的平均值(sum(ARG2)/N)
例子regr_avgx({f1},{f2}),返回: 46

regr_avgy

语法regr_avgy(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述返回因变量的平均值(sum(ARG1)/N)
例子regr_avgy({f1},{f2}),返回: 36

regr_count

语法regr_count(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述两个表达式都不为空的输入行的数目
例子regr_count({f1},{f2}),返回: 5

regr_intercept

语法regr_intercept(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述由(arg2, arg1)对决定的最小二乘拟合的线性方程的 arg1 截距
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(1000,1)], regr_intercept(arg1, arg2),返回 665.666666666666

regr_r2

语法regr_r2(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述相关系数的平方
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(10,1)], regr_r2({arg1}, {arg2}) = 0.06323185011709602

regr_slope

语法regr_slope(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述由(arg2, arg1)对决定的最小二乘拟合的线性方程的斜率
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(10,1)], regr_slope(arg1, arg2) = -0.42857142857142855

regr_sxx

语法regr_sxx(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述sum(arg2^2) - sum(arg2)^2/N(自变量的“平方和”)
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(10,1)], regr_sxx(arg1, arg2) = 17.5

regr_sxy

语法regr_sxy(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述sum(arg2 * arg1) - sum(arg2) * sum(arg1)/N(自变量乘以因变量的“积之合”)
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(10,1)], regr_sxy(arg1, arg2) = -7.5

regr_syy

语法regr_syy(ARG1, ARG2)
参数说明1. ARG1,可选类型:数字;
2. ARG2,可选类型:数字
返回值类型数字
描述sum(arg1^2) - sum(arg1)^2/N(因变量的“平方和”)
例子(arg1, arg2) = [(1,2),(2,3),(3,4),(4,5),(5,6),(10,1)], regr_syy(arg1, arg2) = 50.833333333333336

set_collect

语法set_collect(ARG)
参数说明参与计算的参数,可选类型:任意类型
返回值类型数组
描述聚合函数,把 arg 的参数收集为去重数组。(返回格式为数组类型,如果您发现显示为null,可以尝试将其转为字符串类型查看。)
例子set_collect([1, 2, 2, 3]),返回:[1, 2, 3]

set_collect_flatten

语法set_collect_flatten(ARR)
参数说明数组类型参数,可选类型:数组
返回值类型数组
描述聚合函数,把 arr 的参数收集打平为去重数组。(返回格式为数组类型,如果您发现显示为null,可以尝试将其转为字符串类型查看。)
例子set_collect_flatten([[1, 2], [2, 3]]),返回:[1, 2, 3]

stddev_pop

语法stddev_pop(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述返回数字列的总体标准偏差
例子n = [(1000),(1001),(1003),(1004),(1005),(1000)], stddev_pop(n) = 1.9507833184532709

stddev_samp

语法stddev_samp(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述返回数字列的样本标准偏差
例子n = [(1000),(1001),(1003),(1004),(1005),(1000)], stddev_samp(n) = 2.1369760566432809

string_agg

语法string_agg(S, DELIMITER)
参数说明1. S:需要拼接的字段,可选类型:任意类型;
2. DELIMITER:分隔符,可选类型:字符串
返回值类型字符串
描述把字段 S 拼接成字符串,中间用 DELIMITER 进行分割,其中 oracle 必须带有 within group 子句
例子string_agg(['a', 'b', 'c'], ','),返回:'a,b,c'

sum

语法sum(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述获取指定数值列的和
例子sum({f1}),返回:210

var_pop

语法var_pop(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述返回数字列的总体方差
例子n = [(1000),(1001),(1003),(1004),(1005),(1000)], var_pop(n) = 3.8055555555555554(注:原示例描述有误,实际为总体方差)

var_samp

语法var_samp(N)
参数说明数字类型参数,可选类型:数字
返回值类型数字
描述返回数字列的样本方差(样本标准偏差的平方)
例子n = [(1000),(1001),(1003),(1004),(1005),(1000)], var_samp(n) = 4.5666666666666667

添加过滤条件

支持在聚合计算表达式后面使用 filter 子句,实现过滤的效果。语法如下,其中 filter_clause 是过滤条件

aggregate_name(expression ...) FILTER (WHERE filter_clause )
  • 示例1:
sum({f1}) FILTER (WHERE {f1} > 10)

表示对 f1 字段大于 10 的数据进行求和。

  • 示例2:
avg({f1}) FILTER (WHERE {f1} > 10 AND {f2} = 'abc')

表示对 f1 字段大于 10 且 f2 字段等于 'abc' 的数据进行求和。

添加排序语句

添加排序语句可以对聚合结果进行排序。支持排序语句的函数有:first, last, mode, percentile, string_agg。 语法如下,其中 order_clause 是排序条件。

aggregate_name(expression ...) within group(ORDER BY order_clause)
  • 示例1:
first({f1}) within group(ORDER BY {f2})

表示对 f1 字段按照 f2 字段进行排序,取每组第一个 f1 字段的值。

  • 示例2:
last({f1}) within group(ORDER BY {f2})

表示对 f1 字段按照 f2 字段进行排序,取每组最后一个 f1 字段的值。

  • 示例3:
percentile({f1}, 0.5) within group(ORDER BY {f2})

表示对 f1 字段按照 f2 字段进行排序,取每组排在 50% 位置的 f1 字段的值。

衡石分析平台使用手册