Función escalar WIDTH_BUCKET
La función WIDTH_BUCKET se utiliza para crear histogramas de igual anchura.
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.
| 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 EMPNOSe
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).