Función escalar WIDTH_BUCKET

La función WIDTH_BUCKET se utiliza para crear histogramas de igual anchura.

Leer el esquema de sintaxisOmitir el esquema de sintaxis visualWIDTH_BUCKET(expresión ,límite1,límite2, núm-grupos)

El esquema es SYSIBM.

expresión
Expresión que especifica el valor que se va asignar en un grupo. La expresión debe devolver un valor que sea un tipo de datos numérico incorporado, CHAR, o VARCHAR. En una base de datos Unicode, la expresión puede ser un tipo de datos GRAPHIC o VARGRAPHIC. CHAR, VARCHAR, GRAPHIC, y VARGRAPHIC están soportados utilizando la conversión implícita. Si el tipo de datos es DECFLOAT, el valor no debe ser un valor especial como NaN o INFINITY (SQLSTATE 42815).
límite1
Expresión que especifica el punto final izquierdo. La expresión debe devolver un valor que sea un tipo de datos numérico incorporado, CHAR, o VARCHAR. En una base de datos Unicode, la expresión puede ser un tipo de datos GRAPHIC o VARGRAPHIC. CHAR, VARCHAR, GRAPHIC, y VARGRAPHIC están soportados utilizando la conversión implícita. Si el tipo de datos es DECFLOAT, el valor no debe ser un valor especial como NaN o INFINITY (SQLSTATE 42815).
límite2
Expresión que especifica el punto final derecho. La expresión debe devolver un valor que sea un tipo de datos numérico incorporado, CHAR, o VARCHAR. En una base de datos Unicode, la expresión puede ser un tipo de datos GRAPHIC o VARGRAPHIC. CHAR, VARCHAR, GRAPHIC, y VARGRAPHIC están soportados utilizando la conversión implícita. Si el tipo de datos es DECFLOAT, el valor no debe ser un valor especial como NaN o INFINITY (SQLSTATE 42815). límite1 no debe ser igual a límite2 (SQLSTATE 2201G).
núm-grupos
Expresión que especifica el número de grupos entre límite1 y límite2. La expresión debe devolver un valor que es SMALLINT, INTEGER, BIGINT, DECIMAL, DECFLOAT, CHAR o VARCHAR. En una base de datos Unicode, la expresión puede ser un tipo de datos GRAPHIC o VARGRAPHIC. CHAR, VARCHAR, GRAPHIC, y VARGRAPHIC están soportados utilizando la conversión implícita. Si la expresión es un CHAR, VARCHAR, a GRAPHIC o VARGRAPHIC, se convierte en DECFLOAT(34) antes de evaluar la función. Si el valor es un DECIMAL o DECFLOAT, se trunca a cero lugares a la izquierda del separador decimal. El valor debe ser mayor que cero (SQLSTATE 2201G). Si el tipo de datos es DECFLOAT, el valor no debe ser un valor especial como NaN o INFINITY (SQLSTATE 42815).

El tipo de datos del resultado se basa en el tipo de datos de la núm-grupos.

Tabla 1. Tipo de datos del resultado
Tipo de datos núm-grupos Tipo de datos de resultado
SMALLINT SMALLINT
INTEGER INTEGER
BIGINT BIGINT
DECIMAL(p,s) DECIMAL(MIN(31, p-s+1), 0)
DECFLOAT(n) DECFLOAT(n)

Esta función devuelve el número de grupos en el que se divide la expresión dando límite1, límite2, y núm-grupos. El rango de límite1 a límite2 de divide en núm-grupos grupos que van del grupo al grupo núm-grupos.

Si cualquier argumento puede ser nulo, el resultado puede ser nulo. Si ningún argumento es nulo, el resultado es el valor nulo.

Notas

  • Si límite1 es menor que límite2, cada grupo es un intervalo cerrado a la izquierda, abierto a la derecha en la línea real. Si expresión es menor que límite1, el resultado es 0, que representa un grupo de subdesbordamiento. Si expresión es mayor o igual que límite2, el resultado es núm-grupos + 1,que representa un grupo de desbordamiento.
  • Si límite1 es mayor que límite2, cada grupo es un intervalo cerrado a la izquierda, abierto a la derecha en la línea real. Si expresión es mayor que límite1, el resultado es 0, que representa un grupo de desbordamiento. Si expresión es mayor o igual que límite2, el resultado es núm-grupos + 1,que representa un grupo de desbordamiento.
  • Cuando el núm-grupos es el valor máximo para el tipo de datos, se devuelve un error si el resultado es núm-grupos + 1 (SQLSTATE 22003).
  • Se utilizan varias operaciones aritméticas para calcular el resultado. Si cualquiera de estas operaciones aritméticas da como resultado un desbordamiento, se devuelve un error (SQLSTATE 22003).

Ejemplo

Utilizando la tabla EMPLOYEE, asigne un grupo a cada salario de empleado utilizando un rango de 35000 a 100000 dividido en 13 grupos.
   SELECT EMPNO, SALARY, WIDTH_BUCKET(SALARY, 35000, 100000, 13)
      FROM EMPLOYEE ORDER BY EMPNO
Se asignan 15 grupos con los rangos siguientes:
  • Bucket 0: salary < 35000
  • Bucket 1: 35000 <= salary < 40000
  • Bucket 2: 40000 <= salary < 45000
  • Bucket 3: 45000 <= salary < 50000
  • Bucket 4: 50000 <= salary < 55000
  • Bucket 5: 55000 <= salary < 60000
  • Bucket 6: 60000 <= salary < 65000
  • Bucket 7: 65000 <= salary < 70000
  • Bucket 8: 70000 <= salary < 75000
  • Bucket 9: 75000 <= salary < 80000
  • Bucket 10: 80000 <= salary < 85000
  • Bucket 11: 85000 <= salary < 90000
  • Bucket 12: 90000 <= salary < 95000
  • Bucket 13: 95000 <= salary < 100000
  • Bucket 14: salary >= 100000
La consulta tiene la siguiente salida:
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 registro(s) seleccionado(s).