Oracleでは、WIDTH_BUCKET() この関数を使用すると、等幅のヒストグラムを作成できます。このヒストグラムでは、ヒストグラムの範囲が同じサイズの間隔に分割されます。
特定の式について、WIDTH_BUCKET() 評価後にこの式の値が含まれるバケット番号を返します。
構文
構文は次のようになります:
WIDTH_BUCKET(expr, min_value, max_value, num_buckets) 場所:
-
exprヒストグラムが作成される式です。この式は、数値または日時値、あるいは数値または日時値に暗黙的に変換できる値に評価される必要があります。exprの場合nullと評価されます の場合、式はnullを返します 。 -
min_valueおよびmax_valueexprの許容範囲のエンドポイントに解決される式です。 。これらの式は両方とも数値または日時値に評価される必要があり、どちらもnullに評価できません。 。 -
num_bucketsバケットの数を示す定数に解決される式です。この式は正の整数に評価される必要があります。
例
これがどのように機能するかを示す例です。
SELECT
WIDTH_BUCKET(3, 1, 12, 3) AS r1,
WIDTH_BUCKET(5, 1, 12, 3) AS r2,
WIDTH_BUCKET(9, 1, 12, 3) AS r3
FROM DUAL; 結果:
R1 R2 R3
_____ _____ _____
1 2 3 これが説明です。最後の議論から始めて、最初の議論に逆戻りして、各議論を調べてみましょう。
- 4番目の議論 :バケットを3つ指定します。
3を使用してこれを行います 4番目の引数として。 - 2番目と3番目の引数 :範囲を1〜12に指定します。この場合、2番目の引数は
1です。 3番目の引数は12です 。 - 最初の議論 :この値は、3つのバケットのどれに割り当てられるべきかを知るために、2番目と3番目の引数と比較されます。私の例では、
WIDTH_BUCKET()を呼び出します 概念をよりよく説明するために3回。これは、最初の引数として3つの異なる値を指定できるようにするためであり、それぞれが異なるバケットに割り当てられます。
次の表は、これを視覚化する別の方法を示しています。
| 値 | バケット |
|---|---|
| 1、2、3、4 | バケット1 |
| 5、6、7、8 | バケット2 |
| 9、10、11、12 | バケット3 |
したがって、最初のバケットは1〜4の値を受け入れ、2番目のバケットは5〜8の値を受け入れ、3番目のバケットは9〜12の値を受け入れることがわかります。
バケットが4つになるように変更すると、コードは次のようになります。
SELECT
WIDTH_BUCKET(3, 1, 12, 4) AS r1,
WIDTH_BUCKET(5, 1, 12, 4) AS r2,
WIDTH_BUCKET(9, 1, 12, 4) AS r3
FROM DUAL; そして、テーブルは次のようになります:
| 値 | バケット |
|---|---|
| 1、2、3 | バケット1 |
| 4、5、6 | バケット2 |
| 7、8、9 | バケット3 |
| 10、11、12 | バケット4 |
バケットサイズのみが変更される別の例を次に示します。
SELECT
WIDTH_BUCKET(5, 1, 12, 3) AS r1,
WIDTH_BUCKET(5, 1, 12, 6) AS r2,
WIDTH_BUCKET(5, 1, 12, 10) AS r3
FROM DUAL; 結果:
R1 R2 R3
_____ _____ _____
2 3 4 範囲外
入力がバケットの範囲外の場合は、0のいずれかを取得します またはnum_buckets 入力が範囲より下か上かによって、+1。このような場合、OracleDatabaseは0という番号のアンダーフローバケットを作成します。 num_bucketsという番号のオーバーフローバケット +1。
例:
SELECT
WIDTH_BUCKET(-3, 1, 12, 3),
WIDTH_BUCKET(20, 1, 12, 3)
FROM DUAL; 結果:
WIDTH_BUCKET(-3,1,12,3) WIDTH_BUCKET(20,1,12,3)
__________________________ __________________________
0 4