WIDTH_BUCKET

设定分组范围的最小值、最大值和分组个数,构建指定个数的大小相同的分组,返回指定字段值落入的分组编号。此函数为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_valuemax_valuenum_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函数属于数学函数,更多数据计算、数据转换的相关函数请参见数学函数