聚合函数
本文介绍聚合函数的语法规则,包括参数解释、函数示例等。
函数列表
| 
         函数  | 
       
         描述  | 
      
|---|---|
| 
         用于估算x中不重复值的个数。  | 
      |
| 
         用于对x进行正序排列,返回处于percentage位置的数值。  | 
      |
| 
         用于返回x中任意一个非空的值。  | 
      |
| 
         查询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  | 
      
max_by函数
查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。
| 
         参数名称  | 
       
         描述  | 
       
         类型  | 
       
         是否必选  | 
      
|---|---|---|---|
| 
         x  | 
       
         原始字段。  | 
       
         任意数据类型  | 
       
         是  | 
      
| 
         y  | 
       
         原始字段。  | 
       
         任意数据类型  | 
       
         是  | 
      
| 
         n  | 
       
         大于0的整数。  | 
       
         int  | 
       
         否  | 
      
返回值类型:与参数值的数据类型一致。
- 示例1:统计请求时长最大时对应的请求方法。 
     
表14 查询分析结果 类型
查询语句
返回结果
场景
SELECT max_by(request_method, request_time)
GET
 
- 示例2:统计请求时长最大的3个请求对应的请求方法。 
     
表15 查询分析结果 类型
查询语句
返回结果
场景
SELECT max_by(request_method, request_time, 3)
["GET","GET","GET"]
 
min_by函数
查询y为最小值时对应的x值,或查询最小的n个y值对应的x值。
| 
         参数名称  | 
       
         描述  | 
       
         类型  | 
       
         是否必选  | 
      
|---|---|---|---|
| 
         x  | 
       
         原始字段。  | 
       
         任意数据类型  | 
       
         是  | 
      
| 
         y  | 
       
         原始字段。  | 
       
         任意数据类型  | 
       
         是  | 
      
| 
         n  | 
       
         大于0的整数。  | 
       
         int  | 
       
         否  | 
      
返回值类型:与参数值的数据类型一致
- 示例1:统计请求时长最小时对应的请求方法。 
     
表17 查询分析结果 类型
查询语句
返回结果
场景
SELECT min_by(request_method, request_time)
POST
 - 示例2:统计请求时长最小的3个请求对应的请求方法。 
     
表18 查询分析结果 类型
查询语句
返回结果
场景
SELECT min_by(request_method, request_time, 3)
["POST","POST","POST"]
 
count函数
用于计数。
| 
         参数名称  | 
       
         描述  | 
       
         类型  | 
       
         是否必选  | 
      
|---|---|---|---|
| 
         x  | 
       
         原始字段。  | 
       
         任意  | 
       
         是  | 
      
返回值类型:int
示例:select COUNT(*)
| 
         类型  | 
       
         查询语句  | 
       
         返回结果  | 
      
|---|---|---|
| 
         场景  | 
       
         COUNT(*)  | 
       
         1  | 
      
max函数
用于查询x中最大的值。
| 
         参数名称  | 
       
         描述  | 
       
         类型  | 
       
         是否必选  | 
      
|---|---|---|---|
| 
         x  | 
       
         原始字段。  | 
       
         任意数据  | 
       
         是  | 
      
| 
         n  | 
       
         返回最大值的个数  | 
       
         正整数  | 
       
         否  | 
      
返回值类型:与参数值的数据类型一致。
- 示例1:查询x中的最大值 
     
表22 查询分析结果 类型
查询语句
返回结果
场景
SELECT max(x)
99.0
 - 示例2:查询x中的最大的2个值 
     
表23 查询分析结果 类型
查询语句
返回结果
场景
SELECT max(x, 2)
[99.0, 99.0]