类别:

数值函数

WIDTH_BUCKET

构造等宽直方图(其中直方图范围被划分为大小相同的间隔),并在对表达式求值后返回表达式的值落入的桶编号。该函数返回整数值或 null(如果任何输入为 null)。

语法

WIDTH_BUCKET( <expr> , <min_value> , <max_value> , <num_buckets> )
Copy

实参

expr

为其创建直方图的表达式。此表达式的计算结果必须为数值或可隐式转换为数值的值。

值必须在 -(2^53 - 1)2^53 - 1 (含两者)的范围内。

min_valuemax_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);
Copy

查询表,调用 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 |
+------------+-----------+-------------+
Copy
语言: 中文