流计算 Oceanus 聚合函数

功能描述:统计总行数。
语法:COUNT([ ALL ] expression | DISTINCT expression1 [, expression2] * )
示例测试语句:SELECT COUNT(*) FROM Test;测试结果。

相关产品
流计算 Oceanus 产品页,含版本规格、价格与购买入口。

一、函数

函数名 功能描述
COUNT([ ALL ] expression | DISTINCT expression1 [, expression2]*) 默认情况和 ALL 时,返回 expression 表达式筛选后,非 NULL 值的输入行数。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计总行数。
COUNT(*) COUNT(1) 返回输入的总行数,含 NULL 值。
AVG([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的算术平均值。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求平均。
SUM([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的和。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求和。
MAX([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的最大值(不可用于 TIMESTAMP 类型)。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求最大值。
MIN([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的最小值(不可用于 TIMESTAMP 类型)。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求最小值。
STDDEV_POP([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的总体标准差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求总体标准差。
STDDEV_SAMP([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的样本标准差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求样本标准差。
VAR_POP([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的总体方差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求总体方差。
VAR_SAMP([ ALL | DISTINCT ] expression) VARIANCE([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的样本方差。如果是 DISTINCT,则会先对数据进行去重,然后再进行统计求样本方差。两种写法等价。
COLLECT([ ALL | DISTINCT ] expression) 默认情况和 ALL 时,返回 expression 表达式筛选后,所有输入的非 NULL 输入的 MULTISET 集合(允许重复值)。如果所有值都是 NULL,则返回一个空集。
RANK() 返回某个数据在一组数据中的排名,前后调用的结果可能不连续。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、2、4、5。
DENSE_RANK() 返回某个数据在一组数据中的排名,前后调用的结果保证连续。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、2、3、4。
ROW_NUMBER() 为一组数据的每行分配一个递增且连续的值,从1开始,不会重复。例如有五个数据,其中两个并列第二,那么 RANK() 的结果是1、2、3、4、5。
LEAD(expression [, offset] [, default] ) 在窗口计算中,访问当前行之后 offset 行的数据,默认 offset 为1,即访问下一行的数据。default 表示无数据时的默认值,如果不提供,默认为 NULL。
LAG(expression [, offset] [, default]) 在窗口计算中,访问当前行之前 offset 行的数据,默认 offset 为1,即访问上一行的数据。default 表示无数据时的默认值,如果不提供,默认为 NULL。
FIRST_VALUE(expression) 返回一系列数据中,第一个数据。
LAST_VALUE(expression) 返回一系列数据中,最后一个数据。
LISTAGG(expression [, separator]) 将一组数据使用给定的分隔符进行连接,最终返回一个连接后的字符串。默认分隔符是半角逗号 ,。类似于其他语言的 String.join() 方法。
PERCENTILE(expr, percentage)PERCENTILE(expr, percentage, frequency) 用于计算一组数值在指定百分位(分位数)上的取值,采用线性插值算法(与 SQL 标准 PERCENTILE_CONT 语义一致)。支持传入百分位数组一次性计算多个分位数,也支持通过 frequency 参数指定每个取值的重复次数(频数),适用于延迟、耗时、水位等分布统计场景。

二、示例

为方便演示,建立示例测试数据表 Test:

id site_id count date
1 1 45 2021-07-10
2 3 100 2021-07-13
3 1 230 2021-07-14
4 2 10 2021-07-14
5 5 205 2021-07-14
6 4 13 2021-07-15
7 3 220 2021-07-15
8 5 545 2021-07-16
9 3 201 2021-07-17

三、COUNT

测试语句 测试结果(nums)
SELECT COUNT(*) AS nums FROM Test; 9
SELECT COUNT(DISTINCT site_id) AS nums FROM Test; 5

四、AVG

功能描述: 统计求平均。
语法:AVG([ ALL | DISTINCT ] expression)
示例测试语句: SELECT AVG(count) FROM Test;
测试数据和结果:

测试语句 测试结果(nums)
SELECT AVG(count) AS nums FROM Test; 176.3

五、SUM

功能描述:统计求和。
语法: SUM([ ALL | DISTINCT ] expression)
示例测试语句: SELECT SUM(count) FROM Test;
测试数据和结果:

测试语句 测试结果(nums)
SELECT SUM(count) AS nums FROM Test; 1569

六、MAX

功能描述:统计求最大值。
语法: MAX([ ALL | DISTINCT ] expression)
示例测试语句: SELECT MAX(count) FROM Test;
测试数据和结果:

测试语句 测试结果(nums)
SELECT MAX(count) AS nums FROM Test; 545

七、MIN

功能描述:统计求最小值。
语法: MIN([ ALL | DISTINCT ] expression)
示例测试语句: SELECT MIN(count) FROM Test;
测试数据和结果:

测试语句 测试结果(nums)
SELECT MIN(count) AS nums FROM Test; 13

八、STDDEV_POP

功能描述:统计求总体标准差。
语法: STDDEV_POP([ ALL | DISTINCT ] expression)
示例测试语句: SELECT STDDEV_POP(count) FROM Test;
测试数据和结果:

测试语句 测试结果(pop)
SELECT STDDEV_POP(count) AS pop FROM Test; 156.18

九、VAR_POP

功能描述:统计求总体方差。
语法: VAR_POP([ ALL | DISTINCT ] expression)
示例测试语句: SELECT VAR_POP(count) FROM Test;
测试数据和结果:

测试语句 测试结果(pop)
SELECT VAR_POP(count) AS pop FROM Test; 24390.7

十、FIRST_VALUE

功能描述:返回一系列数据中,第一个数据。
语法: FIRST_VALUE(expression)
示例测试语句: SELECT FIRST_VALUE(count) FROM Test;
测试数据和结果:

测试语句 测试结果(first)
SELECT FIRST_VALUE(count) AS first FROM Test; 45

十一、LAST_VALUE

功能描述:返回一系列数据中,最后一个数据。
语法: LAST_VALUE(expression)
示例测试语句: SELECT LAST_VALUE(count) FROM Test;
测试数据和结果:

测试语句 测试结果(last)
SELECT LAST_VALUE(count) AS last FROM Test; 201

十二、PERCENTILE

支持版本:仅 1.20 及以上版本支持。

功能描述:PERCENTILE 是聚合函数,用于计算一组数值在指定百分位(分位数)上的取值,采用线性插值算法(与 SQL 标准 PERCENTILE_CONT 语义一致)。支持传入百分位数组一次性计算多个分位数,也支持通过 frequency 参数指定每个取值的重复次数(频数),适用于延迟、耗时、水位等分布统计场景。

语法:

PERCENTILE(expr, percentage)

PERCENTILE(expr, percentage, frequency)

参数说明:

参数 类型 是否必填 说明
expr NUMERIC(TINYINT / SMALLINT / INT / BIGINT / FLOAT / DOUBLE / DECIMAL) 是 参与百分位计算的数值表达式。值为 NULL 的行不参与计算。
percentage NUMERIC 或 ARRAY 是 目标百分位,取值范围 [0.0, 1.0],不可为 NULL。传单个数值时返回 DOUBLE;传数组时一次性计算多个百分位,返回 ARRAY。该参数在每个分组内只取第一条数据的值,应使用常量表达式(如 0.95 或 ARRAY[0.5, 0.9, 0.99])。
frequency INTEGER_NUMERIC(TINYINT / SMALLINT / INT / BIGINT) 否 每个 expr 取值的重复次数(频数),不传时默认为 1。为 NULL 或小于等于 0 时,该行不参与计算。

返回值:

返回类型 说明
DOUBLE percentage 为单个数值时,返回对应百分位的计算结果。无论 expr 原始类型是什么(如 INT、DECIMAL),返回值均为 DOUBLE。分组内无有效数据时返回 NULL。
ARRAY percentage 为数组时,返回与各百分位一一对应的结果数组,顺序与输入数组一致。percentage 为空数组或分组内无有效数据时返回 NULL。

错误与空值语义:

场景 行为
expr 为 NULL 该行不参与计算
frequency 为 NULL 或 ≤ 0 该行不参与计算
分组内无有效数据 返回 NULL
percentage 为空数组 返回 NULL
percentage 超出 [0.0, 1.0](常量) SQL 校验失败,作业无法启动
percentage 超出 [0.0, 1.0](非常量表达式) 运行时抛出 IllegalArgumentException: Percentage of PERCENTILE should be between [0.0, 1.0]

示例:

CREATE TABLE test_source (age INT) WITH ( 'connector' = 'datagen', 'fields.age.kind' = 'sequence', 'fields.age.start' = '10', 'fields.age.end' = '1000', 'rows-per-second' = '1');CREATE TABLE logger_sink ( p25 DOUBLE, p50 DOUBLE, p75 DOUBLE, percent1 DOUBLE) WITH ( 'connector' = 'logger', 'print-identifier' = 'DebugData');INSERT INTO logger_sinkSELECT T1.p25, T1.p50, T1.p75, T1.percentiles [1] AS percent1FROM ( SELECT PERCENTILE(age, 0.25) AS p25, — 标量形式 PERCENTILE(age, 0.50) AS p50, PERCENTILE(age, 0.75) AS p75, PERCENTILE(age, ARRAY [0.9, 0.7, 0.3, 1.0]) AS percentiles — 数组形式 FROM test_source ) T1;

赞 (0)
上一篇 4天前
下一篇 4天前