更新时间:2024-07-25 GMT+08:00
分享

聚合函数

本文介绍聚合函数的语法规则,包括参数解释、函数示例等。

函数列表

表1 聚合函数

函数

描述

approx_distinct函数

用于估算x中不重复值的个数。

approx_percentile函数

用于对x进行正序排列,返回处于percentage位置的数值。

arbitrary函数

用于返回x中任意一个非空的值。

max_by函数

查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。

min_by函数

查询y为最小值时对应的x值,或查询最小的n个y值对应的x值。

count函数

用于计数

max函数

用于查询x中最大的值。

min函数

用于查询x中最小值。

avg函数

用于计算x的算术平均值

approx_distinct函数

用于估算x中不重复值的个数。

  • 估算x中不重复值的个数,默认存在2.3%的标准误差

    语法:approx_distinct(x)

  • 估算x中不重复值的个数,支持自定义标准误差

    语法:approx_distinct(x, e)

表2 参数说明

参数名称

描述

类型

是否必选

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类型。

    语法:approx_percentile(x, percentage)

  • 对x进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。

    语法:approx_percentile(x, array[percentage01, percentage02)]

  • 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。

    语法:approx_percentile(x, weight, percentage)

  • 对x和权重的乘积进行正序排列,返回处于percentage01、percentage02位置的x,返回结果为array(double,double)类型。

    语法:approx_percentile(x, weight, array[percentage01, percentage02...])

  • 对x和权重的乘积进行正序排列,返回大约处于percentage位置的x,返回结果为double类型。支持设置返回结果的准确度。

    语法:approx_percentile(x, weight, percentage, accuracy)

表5 参数说明

参数名称

描述

类型

是否必选

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)

表11 参数说明

参数名称

描述

类型

是否必选

x

原始字段。

任意

返回值类型:与参数值的数据类型一致

示例:select arbitrary(region)

表12 查询分析结果

类型

场景

查询语句

arbitrary(region)

返回结果

r2

max_by函数

查询y为最大值时对应的x值,或查询最大的n个y值对应的x值。

  • 查询y为最大值时对应的x值。

    语法:max_by(x, y)

  • 查询最大的n个y值对应的x值。

    语法:max_by(x, y, n)

表13 参数说明

参数名称

描述

类型

是否必选

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值。

  • 查询y为最小值时对应的x值。

    语法:max_by(x, y)

  • 查询最小的n个y值对应的x值。

    语法:max_by(x, y, n)

表16 参数说明

参数名称

描述

类型

是否必选

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函数

用于计数。

  • 统计所有的日志条数。

    语法:COUNT(*)

  • 统计所有的日志条数。等同于count(*)。

    语法:COUNT(1)

  • 统计x中值不为NULL的日志条数

    语法:COUNT(x)

表19 参数说明

参数名称

描述

类型

是否必选

x

原始字段。

任意

返回值类型:int

示例:select COUNT(*)

表20 查询分析结果

类型

场景

查询语句

COUNT(*)

返回结果

1

max函数

用于查询x中最大的值。

  • 查询x中最大的值。

    语法:max(x)

  • 查询x中最大的n个值,结果返回为数组。

    语法: max(x, n)

表21 参数说明

参数名称

描述

类型

是否必选

x

原始字段。

任意数据

n

返回最大值的个数

正整数

返回值类型:与参数值的数据类型一致

  • 示例1:查询x中的最大值
    表22 查询分析结果

    类型

    场景

    查询语句

    SELECT max(x)

    返回结果

    99.0

  • 示例2:查询x中的最大的2个值
    表23 查询分析结果

    类型

    场景

    查询语句

    SELECT max(x, 2)

    返回结果

    [99.0, 99.0]

min函数

用于查询x中最小值。

  • 查询x中最小的值。

    语法:min(x)

  • 查询x中最小的n个值,结果返回为数组。

    语法: min(x, n)

表24 参数说明

参数名称

描述

类型

是否必选

x

原始字段。

任意数据

n

返回最小值的个数

正整数

返回值类型:与参数值的数据类型一致

  • 示例1:查询x中的最小值
    表25 查询分析结果

    类型

    场景

    查询语句

    SELECT min(x)

    返回结果

    10.0

  • 示例2:查询x中的最小的2个值
    表26 查询分析结果

    类型

    场景

    查询语句

    SELECT min(x, 2)

    返回结果

    [10.0, 10.0]

avg函数

用于计算x的算术平均值。

语法:AVG(x)

表27 参数说明

参数名称

描述

类型

是否必选

x

原始字段。

number

返回值类型:double

示例:select AVG(value)

表28 查询分析结果

类型

场景

查询语句

AVG(value)

返回结果

1

相关文档