カテゴリ:

ウィンドウ関数

WIDTH_BUCKET

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

注釈

WIDTH_BUCKET 関数は真のウィンドウ関数ではありません。ただし、次の理由により、ウィンドウ関数として大まかに分類されています。

  • 行のグループに対してウィンドウのような操作を実行します。

  • 次の点でウィンドウのように動作します。

    • 戻り値の数は、入力値の数と同じです。(したがって、集計関数ではありません。)

    • 各戻り値は、現在の行だけでなく、グループ内の他の行にも依存します。(したがって、スカラー関数ではありません。)

構文

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

引数

ヒストグラムが作成される式です。この式は、数値、または暗黙的に数値に変換できる値に評価される必要があります。

最小値 および 最大値

式の許容範囲の下限および上限です。エンドポイントも数値に評価され、等しくない必要があります。

バケット数

必要なバケット数です。正の整数値でなければなりません。式の値が各バケットに割り当てられ、関数は対応するバケット番号を返します。

式が範囲外にある場合、関数は次を返します。

  • 0 式が 最小値 未満の場合。

  • バケット数 + 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);

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 |
+------------+-----------+-------------+