Columnas
Compuestas: Ejemplo
Observe el ejemplo:
SELECT department_id, job_id,manager_id, SUM(salary)
FROM
employees
GROUP BY ROLLUP( department_id,job_id, manager_id);
Esta consulta hace que Oracle
Server calcule los siguientes agrupamientos:
1. (job_id, manager_id)
2. (department_id, job_id, manager_id)
3. (department_id)
4. Suma
total
Si sólo le interesan grupos
específicos, no puede limitar el cálculo a esos agrupamientos sin utilizar
columnas compuestas. Con las columnas compuestas, esto es posible si se trata
las columnas JOB_ID y MANAGER_ID como una unidad durante la
acumulación. Las columnas entre paréntesis se tratan como una unidad durante
los cálculos ROLLUP y CUBE. Esto se ilustra en el ejemplo de
la diapositiva. Al poner las columnas JOB_ID y MANAGER_ID entre paréntesis, le indica a
Oracle Server que trate JOB_ID y MANAGER_ID como una unidad, que es una
columna compuesta.
Columnas Compuestas: Ejemplo (continuación)
El ejemplo de la diapositiva
calcula los siguientes agrupamientos:
•(department_id, job_id, manager_id)
•(department_id)
•(
)
El ejemplo de la diapositiva
muestra lo siguiente:
•Salario total de todos los puestos
y supervisor (etiquetado como 1)
•Salario total de todos los
departamentos, los puestos y los supervisores (etiquetado
como 2)
•Salario total de todos los
departamentos (etiquetado como 3)
•Suma total (etiquetado como 4)
El ejemplo de la diapositiva
también se puede escribir como:
SELECT department_id, job_id, manager_id, SUM(salary)
FROM employees
GROUP BY department_id,job_id, manager_id
UNION ALL
SELECT department_id, TO_CHAR(NULL),TO_NUMBER(NULL),
SUM(salary)
FROM employees
GROUP BY department_id
UNION ALL
SELECT TO_NUMBER(NULL),
TO_CHAR(NULL),TO_NUMBER(NULL), SUM(salary)
FROM employees
GROUP BY
();
En ausencia de un optimizador que
busque en los bloques de consulta para generar el plan de ejecución, la
consulta anterior necesitaría tres exploraciones de la tabla base, EMPLOYEES. Esto podría resultar muy
ineficiente. Por tanto, se recomienda utilizar columnas compuestas.
Columnas
Concatenadas
Los agrupamientos concatenados
ofrecen una forma concisa de generar combinaciones de agrupamientos útiles.
Para especificar los agrupamientos concatenados, se muestran varios juegos de
agrupamientos, cubos y acumulaciones, y se separan con comas. A continuación se
ofrece un ejemplo de juegos de agrupamientos concatenados:
GROUP
BY GROUPING SETS(a, b), GROUPING SETS(c, d)
Este ejemplo SQL define los
siguientes agrupamientos:
(a,
c), (a, d), (b, c), (b, d)
La concatenación de juegos de
agrupamientos es muy útil por estos motivos:
•Facilidad de desarrollo de
consultas:
No es necesario enumerar manualmente todos los agrupamientos.
•Uso por las aplicaciones: El SQL generado por aplicaciones
OLAP suele implicar la concatenación de juegos de agrupamientos, en la que cada
juego de agrupamientos define los agrupamientos necesarios para una dimensión.
Los agrupamientos concatenados ofrecen una forma concisa de generar combinaciones de agrupamientos útiles.
Para especificar los juegos de agrupamientos concatenados, separe varias operaciones
ROLLUP, CUBE y juegos de agrupamientos con comas, de modo que Oracle Server las combine en una única cláusula
GROUP BY.
El resultado es un producto combinado de agrupamientos de cada juego de agrupamientos.
GROUP BY GROUPING SETS(a, b), GROUPING SETS(c, d)
Agrupamientos
Concatenados: Ejemplo
El ejemplo de la diapositiva da
como resultado los siguientes agrupamientos:
•(job_id,
manager_id)
(1)
•(department_id,job_id,
manager_id)
(2)
•(job_id)(3)
•(department_id,manager_id)(4)
•(department_id) (5)
Se calcula el salario total de cada
uno de estos grupos.