カテゴリ:

数値関数

WIDTH_BUCKET

等幅ヒストグラムを作成します。この場合、ヒストグラムの範囲は同じサイズの間隔に分割され、評価された後、式の値が含まれるバケット番号を返します。この関数は、整数値またはnull(入力がnullの場合)を返します。

構文

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

引数

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 未満の場合。

  • 式が max_value 以上の場合は num_buckets + 1

$200,000~600,000の価格帯で販売され、販売日順に並べられた住宅の price 列に4バケットヒストグラムを作成します。この関数は、セット内の各値のバケット番号(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