WIDTH_BUCKET スカラー関数

WIDTH_BUCKET 関数は、等幅ヒストグラムを作成するために使用します。

Read syntax diagramSkip visual syntax diagramWIDTH_BUCKET(expression ,bound1,bound2, num-buckets)

スキーマは 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)。
バケットの数
bound1bound2 の間のバケット数を指定する式。 この式は、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 のデータ・タイプによって決まります。

表 1. 結果のデータ・タイプ
num-buckets のデータ・タイプ 結果のデータ・タイプ
SMALLINT SMALLINT
INTEGER INTEGER
BIGINT BIGINT
DECIMAL(p,s) DECIMAL(MIN(31, p-s+1), 0)
DECFLOAT(n) DECFLOAT(n)

この関数は、bound1bound2、および num-buckets を指定した場合に expression が相当するバケットの番号を戻します。 bound1 から bound2 までの範囲が、バケット 1 からバケット num-buckets までの num-buckets 個のバケットに分割されます。

引数のいずれかが NULL になる可能性がある場合、結果も NULL になる可能性があります。 引数のいずれかが NULL の場合、その結果は NULL 値です。

  • bound1bound2 より小さい場合、各バケットは数直線上で左閉右開区間となります。 expressionbound1 より小さい場合、結果は、アンダーフロー・バケットを表す 0 となります。 expressionbound2 以上の場合、結果は、オーバーフロー・バケットを表す num-buckets + 1 となります。
  • bound1bound2 より大きい場合、各バケットは数直線上で左閉右開区間となります。 expressionbound1 より大きい場合、結果は、アンダーフロー・バケットを表す 0 となります。 expressionbound2 以下の場合、結果は、オーバーフロー・バケットを表す 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.