设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。此函数为MaxCompute 2.0扩展函数。
注意事项
支持的数据类型为BIGINT、INT、FLOAT、DOUBLE、DECIMAL以及数据类型2.0的DECIMAL(precision,scale),详情请参见2.0数据类型版本。
命令格式
width_bucket(numeric <expr>, numeric <min_value>, numeric <max_value>, int <num_buckets>)
参数说明
expr:必填。需要判断分组编号的字段。
min_value:必填。分组范围最小值。
max_value:必填。分组范围最大值,最大值必须比最小值大。
num_buckets:必填。分组个数,必须大于0。
返回值说明
返回值为BIGINT类型,范围为0到设定的分组个数+1。返回规则如下:
expr值小于min_value时,返回0。
expr大于max_value时,返回设定的分组个数+1。
expr值为NULL时,分组编号返回值也为NULL。其他情况返回字段值落入的分组编号。字段值对应的分组编号取值规则为
floor( num_buckets * (expr - min_value)/(max_value - min_value) + 1)
。min_value、max_value或num_buckets值为NULL时,返回NULL。
使用示例
示例1:入参无NULL。命令示例如下。
select key,value,width_bucket(value,100,500,5) as value_group from values (1,99), (2,100), (3,199), (4,200), (5,499), (6,500), (7,501), (8,NULL) as t(key,value);
返回结果如下。
+------+-------+-------------+ | key | value | value_group | +------+-------+-------------+ | 1 | 99 | 0 | | 2 | 100 | 1 | | 3 | 199 | 2 | | 4 | 200 | 2 | | 5 | 499 | 5 | | 6 | 500 | 6 | | 7 | 501 | 6 | | 8 | NULL | NULL | +------+-------+-------------+
示例2:入参存在NULL。命令示例如下。
select key,value,width_bucket(value,100,500,null) as value_group from values (1,99), (2,100), (3,199), (4,200), (5,499), (6,500), (7,501), (8,NULL) as t(key,value);
返回结果如下。
+------+-------+-------------+ | key | value | value_group | +------+-------+-------------+ | 1 | 99 | NULL | | 2 | 100 | NULL | | 3 | 199 | NULL | | 4 | 200 | NULL | | 5 | 499 | NULL | | 6 | 500 | NULL | | 7 | 501 | NULL | | 8 | NULL | NULL | +------+-------+-------------+
相关函数
WIDTH_BUCKET函数属于数学函数,更多数据计算、数据转换的相关函数请参见数学函数。