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

Entradas populares de este blog

Backup y Recuperación en Frío (ORACLE)

Uso de la función RANKX (DAX)