Funciones Analíticas en Oracle II
Hoy nos toca ver la función CUBE. La función CUBE es una ampliación de la función ROLLUP y nos permite obtener subtotales por todos los campos indicados en la función.
La sintaxis es la siguiente:
Group by cube (campo1, campo2)
Volviendo al ejemplo que habíamos usado con la función rollup en el que suponíamos una tabla de DEPARTAMENTOS donde se recogen las distintas áreas departamentales de nuestra empresa y otra tabla de EMPLEADOS donde recoge toda la información de los trabajadores, su rango salarial, sueldo bruto y departamento al que pertenece.
Usando la opción cube, en este caso, podemos ver que el resultado difiere con respecto al uso de la función rollup:
select d.departamento, e.rango, sum(e.sueldo_bruto) as total
from departamentos d, empleados e
where d.id_departamento=e.id_empleado
group by ROLLUP (d.departamento, e.rango)
order by 1, 2;
Lo cambiamos ahora por la función CUBE:
select d.departamento, e.rango, sum(e.sueldo_bruto) as total
from departamentos d, empleados e
where d.id_departamento=e.id_empleado
group by CUBE (d.departamento, e.rango)
order by 1, 2;
El resultado obtenido debería parecerse a:
departamento rango total
-------------------------------
COMPRAS A 120.000
COMPRAS B 80.000
COMPRAS 200.000 <- Total por departamento
LOGISTICA B 60.000
LOGISTICA C 40.000
LOGISTICA 100.000
VENTAS A 200.000
VENTAS C 50.000
VENTAS 250.000
A 220.000
B 140.000
C 90.000
460.000 <- Total por rango
Comentarios