WIDTH_BUCKET スカラー関数
WIDTH_BUCKET 関数は、等幅ヒストグラムを作成するために使用します。
スキーマは SYSIBM です。
- expression
- バケットに割り当てる値を指定する式。 式は組み込み数値、CHAR、または VARCHAR データ・タイプの値を戻す必要があります。 Unicode データベースでは、 式は GRAPHIC または VARGRAPHIC のデータ・タイプにすることもできます。 CHAR、VARCHAR、GRAPHIC、および VARGRAPHIC は、暗黙的キャストを介してサポートされます。 データ・タイプが DECFLOAT の場合、値は NaN や INFINITY などの特殊値であってはなりません (SQLSTATE 42815)。
- bound1
- 左端点を指定する式。 式は組み込み数値、CHAR、または VARCHAR データ・タイプの値を戻す必要があります。 Unicode データベースでは、 式は GRAPHIC または VARGRAPHIC のデータ・タイプにすることもできます。 CHAR、VARCHAR、GRAPHIC、および VARGRAPHIC は、暗黙的キャストを介してサポートされます。 データ・タイプが DECFLOAT の場合、値は NaN や INFINITY などの特殊値であってはなりません (SQLSTATE 42815)。
- bound2
- 右端点を指定する式。 式は組み込み数値、CHAR、または VARCHAR データ・タイプの値を戻す必要があります。 Unicode データベースでは、 式は GRAPHIC または VARGRAPHIC のデータ・タイプにすることもできます。 CHAR、VARCHAR、GRAPHIC、および VARGRAPHIC は、暗黙的キャストを介してサポートされます。 データ・タイプが DECFLOAT の場合、値は NaN や INFINITY などの特殊値であってはなりません (SQLSTATE 42815)。 bound1 は、bound2 と同じであってはなりません (SQLSTATE 2201G)。
- バケットの数
- bound1 と bound2 の間のバケット数を指定する式。 この式は、SMALLINT、INTEGER、BIGINT、DECIMAL、DECFLOAT、CHAR、または VARCHAR のいずれかのデータ・タイプの値を戻す必要があります。 Unicode データベースでは、 式は GRAPHIC または VARGRAPHIC のデータ・タイプにすることもできます。 CHAR、VARCHAR、GRAPHIC、および VARGRAPHIC は、暗黙的キャストを介してサポートされます。 CHAR、VARCHAR、GRAPHIC、または VARGRAPHIC の式は、関数の評価の前に DECFLOAT(34) にキャストされます。 値が DECIMAL または DECFLOAT である場合は、小数点以下が切り捨てられ、小数点の左側だけが残されます。 値は 0 より大きくなければなりません (SQLSTATE 2201G)。 データ・タイプが DECFLOAT の場合、値は NaN や INFINITY などの特殊値であってはなりません (SQLSTATE 42815)。
結果のデータ・タイプは、num-buckets のデータ・タイプによって決まります。
num-buckets のデータ・タイプ | 結果のデータ・タイプ |
---|---|
SMALLINT | SMALLINT |
INTEGER | INTEGER |
BIGINT | BIGINT |
DECIMAL(p,s) | DECIMAL(MIN(31, p-s+1), 0) |
DECFLOAT(n) | DECFLOAT(n) |
この関数は、bound1、bound2、および num-buckets を指定した場合に expression が相当するバケットの番号を戻します。 bound1 から bound2 までの範囲が、バケット 1 からバケット num-buckets までの num-buckets 個のバケットに分割されます。
引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数のいずれかが NULL の場合、その結果は NULL 値です。
注
- bound1 が bound2 より小さい場合、各バケットは数直線上で左閉右開区間となります。 expression が bound1 より小さい場合、結果は、アンダーフロー・バケットを表す 0 となります。 expression が bound2 以上の場合、結果は、オーバーフロー・バケットを表す num-buckets + 1 となります。
- bound1 が bound2 より大きい場合、各バケットは数直線上で左閉右開区間となります。 expression が bound1 より大きい場合、結果は、アンダーフロー・バケットを表す 0 となります。 expression が bound2 以下の場合、結果は、オーバーフロー・バケットを表す num-buckets + 1 となります。
- num-buckets をデータ・タイプの最大値にした場合、結果が num-buckets + 1 になるとエラーが戻されます (SQLSTATE 22003)。
- 結果を計算するために、複数の算術演算が使用されます。 これらの算術演算のいずれかでオーバーフローが発生した場合は、エラーが戻されます (SQLSTATE 22003)。
例
EMPLOYEE 表を使用し、35000 から 100000 までの範囲を 13 個のバケットに分割し、各従業員の給与をバケットに割り当てます。
SELECT EMPNO, SALARY, WIDTH_BUCKET(SALARY, 35000, 100000, 13)
FROM EMPLOYEE ORDER BY EMPNO
以下の範囲で、15 個のバケットが割り当てられます。
- バケット 0: 給与 < 35000
- バケット 1: 35000 <= 給与 < 40000
- バケット 2: 40000 <= 給与 < 45000
- バケット 3: 45000 <= 給与 < 50000
- バケット 4: 50000 <= 給与 < 55000
- バケット 5: 55000 <= 給与 < 60000
- バケット 6: 60000 <= 給与 < 65000
- バケット 7: 65000 <= 給与 < 70000
- バケット 8: 70000 <= 給与 < 75000
- バケット 9: 75000 <= 給与 < 80000
- バケット 10: 80000 <= 給与 < 85000
- バケット 11: 85000 <= 給与 < 90000
- バケット 12: 90000 <= 給与 < 95000
- バケット 13: 95000 <= 給与 < 100000
- バケット 14: 給与 >= 100000
この照会の出力は以下のとおりです。
EMPNO SALARY 3
------ ----------- -----------
000010 152750.00 14
000020 94250.00 12
000030 98250.00 13
000050 80175.00 10
000060 72250.00 8
000070 96170.00 13
000090 89750.00 11
000100 86150.00 11
000110 66500.00 7
000120 49250.00 3
000130 73800.00 8
000140 68420.00 7
000150 55280.00 5
000160 62250.00 6
000170 44680.00 2
000180 51340.00 4
000190 50450.00 4
000200 57740.00 5
000210 68270.00 7
000220 49840.00 3
000230 42180.00 2
000240 48760.00 3
000250 49180.00 3
000260 47250.00 3
000270 37380.00 1
000280 36250.00 1
000290 35340.00 1
000300 37750.00 1
000310 35900.00 1
000320 39950.00 1
000330 45370.00 3
000340 43840.00 2
200010 46500.00 3
200120 39250.00 1
200140 68420.00 7
200170 64680.00 6
200220 69840.00 7
200240 37760.00 1
200280 46250.00 3
200310 35900.00 1
200330 35370.00 1
200340 31840.00 0
42 record(s) selected.