聚合函数
本文介绍聚合函数的语法规则,包括参数解释、函数示例等。
函数列表
| 函数 | 描述 |
|---|---|
| 用于估算x中不重复值的个数。 | |
| 用于对x进行正序排列,返回处于percentage位置的数值。 | |
| 用于返回x中任意一个非空的值。 | |
| 检查所有行是否满足布尔条件(等价于every)。 | |
| 查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。 | |
| 查询y为最小值时对应的x值,或查询最小的n个y值对应的x值。 | |
| 用于计数。 | |
| 用于查询x中最大的值。 | |
| 用于查询x中最小值。 | |
| 用于计算x的算术平均值。 |
approx_distinct函数
用于估算x中不重复值的个数。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段 | 任意 | 是 |
| e | 自定义标准误差 | double类型,取值为[0.0115, 0.26] | 否 |
返回值类型:bigint类型
- 示例1:使用approx_distinct函数估算不重复的clientIp字段值,标准误差为2.3%。
表3 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_distinct(clientIp)
1
- 示例2:使用approx_distinct函数估算不重复的clientIp字段值, 自定义标准误差为10%。
表4 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_distinct(clientIp, 0.1)
1
approx_percentile函数
用于对x进行正序排列,返回处于percentage位置的数值。
- 对于x进行正序排列,返回处于percentage位置的x,返回结果为double类型。
- 对x进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。
- 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。
- 对x和权重的乘积进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。
语法:approx_percentile(x, weight, array[percentage01, percentage02...])
- 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。支持设置返回结果的准确度。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段 | double | 是 |
| percentage | 百分比值,取值范围为[0,1]。 | double | 是 |
| weight | 权重,大于1的整数。 设置权重后,系统根据x与权重的乘积进行排序。 | int | 否 |
| accuracy | 准确度,取值范围为(0,1)。 | double | 否 |
返回值类型:double类型或array(double,...,double)类型
- 示例1:对request_time列进行排序后,返回大约处于50%位置的request_time字段的值。
表6 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_percentile(request_time, 0.5)
45.0
- 示例2:对request_time列进行排序后,返回处于10%、20%及70%位置的request_time字段的值。
表7 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_percentile(request_time,array[0.1,0.2,0.7])
[17.0, 24.0, 59.0]
- 示例3:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于50%位置的request_time字段的值, 权重值为60。
表8 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_percentile(request_time, 60, 0.5)
45.0
- 示例4:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于80%和90%位置的request_time字段的值,权重值为60。
表9 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_percentile(request_time, 60, array[0.8, 0.9])
[66.0,73.0]
- 示例5:根据request_time与权重的乘积对request_time列进行排序后,返回大约处于50%位置的request_time字段的值,权重值为60,准确度为0.2。
表10 查询分析结果 类型
查询语句
返回结果
场景
SELECT approx_percentile(request_time, 60, 0.5, 0.2)
45.0
arbitrary函数
用于返回x中任意一个非空的值。
语法:arbitrary(x)
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段。 | 任意 | 是 |
返回值类型:与参数值的数据类型一致。
示例:select arbitrary(region)
| 类型 | 查询语句 | 返回结果 |
|---|---|---|
| 场景 | arbitrary(region) | r2 |
bool_and函数
bool_and 是 Trino 中用于对一组布尔值执行逻辑与(AND)聚合操作的聚合函数。它返回一个布尔值,表示输入中所有非 NULL 值是否均为 TRUE。若任意一个非 NULL 值为 FALSE,或输入中无非 NULL 值,则返回 FALSE。该函数适用于需要判断“所有条件是否都满足”的场景,常用于数据验证、状态检查、规则匹配等业务逻辑。
语法:bool_and(x)
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 要进行逻辑与聚合的布尔表达式或列 | BOOLEAN | 是 |
返回值类型:BOOLEAN
- 若所有非NULL值均为TRUE→返回TRUE
- 若存在至少一个非NULL值为FALSE→返回FALSE
- 若所有值均为NULL→返回FALSE
示例:* | select method , bool_and(status >= 500) as all_error group by methed
| 类型 | 查询语句 | 返回结果 |
|---|---|---|
| 场景 | method | all_error |
| DELETE | true | |
| PUT | false | |
| POST | false | |
| GET | false |
max_by函数
查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段。 | 任意数据类型 | 是 |
| y | 原始字段。 | 任意数据类型 | 是 |
| n | 大于0的整数。 | int | 否 |
返回值类型:与参数值的数据类型一致。
- 示例1:统计请求时长最大时对应的请求方法。
表16 查询分析结果 类型
查询语句
返回结果
场景
SELECT max_by(request_method, request_time)
GET
- 示例2:统计请求时长最大的3个请求对应的请求方法。
表17 查询分析结果 类型
查询语句
返回结果
场景
SELECT max_by(request_method, request_time, 3)
["GET","GET","GET"]
min_by函数
查询y为最小值时对应的x值,或查询最小的n个y值对应的x值。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段。 | 任意数据类型 | 是 |
| y | 原始字段。 | 任意数据类型 | 是 |
| n | 大于0的整数。 | int | 否 |
返回值类型:与参数值的数据类型一致
- 示例1:统计请求时长最小时对应的请求方法。
表19 查询分析结果 类型
查询语句
返回结果
场景
SELECT min_by(request_method, request_time)
POST
- 示例2:统计请求时长最小的3个请求对应的请求方法。
表20 查询分析结果 类型
查询语句
返回结果
场景
SELECT min_by(request_method, request_time, 3)
["POST","POST","POST"]
count函数
用于计数。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段。 | 任意 | 是 |
返回值类型:int
示例:select COUNT(*)
| 类型 | 查询语句 | 返回结果 |
|---|---|---|
| 场景 | COUNT(*) | 1 |
max函数
用于查询x中最大的值。
| 参数名称 | 描述 | 类型 | 是否必选 |
|---|---|---|---|
| x | 原始字段。 | 任意数据 | 是 |
| n | 返回最大值的个数 | 正整数 | 否 |
返回值类型:与参数值的数据类型一致。
- 示例1:查询x中的最大值
表24 查询分析结果 类型
查询语句
返回结果
场景
SELECT max(x)
99.0
- 示例2:查询x中的最大的2个值
表25 查询分析结果 类型
查询语句
返回结果
场景
SELECT max(x, 2)
[99.0, 99.0]