- 类别:
WIDTH_BUCKET¶
构造等宽直方图(其中直方图范围被划分为大小相同的间隔),并在对表达式求值后返回表达式的值落入的桶编号。该函数返回整数值或 null(如果任何输入为 null)。
语法¶
WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
实参¶
expr
为其创建直方图的表达式。此表达式的计算结果必须为数值或可隐式转换为数值的值。
值必须在
-(2^53 - 1)
到2^53 - 1
(含两者)的范围内。min_value
和max_value
表达式可接受范围的低端点和高端点。这两个端点的计算结果也必须为数值,并且不能相等。
低端点和高端点必须在
-(2^53 - 1)
到2^53 - 1
(含两者)的范围内。此外,这两点之间的差值必须小于2^53
(即abs(max_value - min_value) < 2^53
)。num_buckets
所需的桶数量;必须是正整数值。来自表达式的值分配给每个桶,然后函数返回相应的桶编号。
当表达式超出范围时,函数将返回:
0
(如果表达式小于min_value
)。num_buckets + 1
(如果表达式大于或等于max_value
)。
示例¶
在 price
列上,为售价介于 200k - 600k 美元之间的房屋创建一个四桶直方图,并按销售日期排序。该函数返回集合中每个值的桶编号 (SALES GROUP
)。
创建并填写表:
CREATE TABLE home_sales ( sale_date DATE, price NUMBER(11, 2) ); INSERT INTO home_sales (sale_date, price) VALUES ('2013-08-01'::DATE, 290000.00), ('2014-02-01'::DATE, 320000.00), ('2015-04-01'::DATE, 399999.99), ('2016-04-01'::DATE, 400000.00), ('2017-04-01'::DATE, 470000.00), ('2018-04-01'::DATE, 510000.00);查询表,调用 WIDTH_BUCKET():
SELECT sale_date, price, WIDTH_BUCKET(price, 200000, 600000, 4) AS "SALES GROUP" FROM home_sales ORDER BY sale_date; +------------+-----------+-------------+ | SALE_DATE | PRICE | SALES GROUP | |------------+-----------+-------------| | 2013-08-01 | 290000.00 | 1 | | 2014-02-01 | 320000.00 | 2 | | 2015-04-01 | 399999.99 | 2 | | 2016-04-01 | 400000.00 | 3 | | 2017-04-01 | 470000.00 | 3 | | 2018-04-01 | 510000.00 | 4 | +------------+-----------+-------------+