You are on page 1of 20

Mejoras de la Clusula

GROUP BY

Objetivos

Al finalizar esta leccin, debera estar capacitado


para:

Utilizar la operacin ROLLUP para producir


valores subtotales

Utilizar la operacin CUBE para producir valores de


tabulacin cruzada

Utilizar la funcin GROUPING para identificar los valores


de fila creados por ROLLUP o CUBE

Utilizar GROUPING SETS para producir un nico juego


de resultados

17-2

Revisin de Funciones de Grupo


Las funciones de grupo operan en juegos de filas para
proporcionar un resultado por grupo.
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

[column,] group_function(column). . .
table
condition]
group_by_expression]
column];

Ejemplo:
SELECT AVG(salary), STDDEV(salary),
COUNT(commission_pct),MAX(hire_date)
FROM
employees
WHERE job_id LIKE 'SA%';

17-3

Revisin de la Clusula GROUP BY


Sintaxis:
SELECT
FROM
[WHERE
[GROUP BY
[ORDER BY

[column,] group_function(column). . .
table
condition]
group_by_expression]
column];

Ejemplo:
SELECT

department_id, job_id, SUM(salary),


COUNT(employee_id)
FROM
employees
GROUP BY department_id, job_id ;

17-4

Revisin de la Clusula HAVING


SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column)...
table
condition]
group_by_expression]
having_expression]
column];

Utilice la clusula HAVING para especificar qu grupos


se van a mostrar.

Restringe an ms los grupos basndose en una


condicin limitadora.

17-5

GROUP BY con operadores


CUBE y ROLLUP
Utilice ROLLUP o CUBE con GROUP BY para producir filas
superagregadas realizando referencias cruzadas de
columnas.

El agrupamiento ROLLUP produce un juego de


resultados que contiene las filas agrupadas normales y
los valores subtotales.

El agrupamiento CUBE produce un juego de resultados


que contiene las filas de ROLLUP y las de tabulacin
cruzada.

17-6

Operador ROLLUP
SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column). . .
table
condition]
[ROLLUP] group_by_expression]
having_expression];
column];

ROLLUP es una extensin de la clusula GROUP BY.


Utilice la operacin ROLLUP para producir agregados
acumulativos como, por ejemplo, subtotales.

17-7

Ejemplo de Operator ROLLUP


SELECT
FROM
WHERE
GROUP BY

department_id, job_id, SUM(salary)


employees
department_id < 60
ROLLUP(department_id, job_id);

17-8

Operador CUBE

SELECT
FROM
[WHERE
[GROUP BY
[HAVING
[ORDER BY

[column,] group_function(column)...
table
condition]
[CUBE] group_by_expression]
having_expression]
column];

CUBE es una extensin de la clusula GROUP BY.


Puede utilizar el operador CUBE para producir valores
de tabulacin cruzada con una nica sentencia SELECT.

17-9

Ejemplo de Operador CUBE


SELECT
FROM
WHERE
GROUP BY

department_id, job_id, SUM(salary)


employees
department_id < 60
CUBE (department_id, job_id) ;

1
2

3
4

17-10

Funcin GROUPING
SELECT

[column,] group_function(column) . ,
GROUPING(expr)
FROM
table
[WHERE
condition]
[GROUP BY [ROLLUP][CUBE] group_by_expression]
[HAVING
having_expression]
[ORDER BY column];

La funcin GROUPING se puede utilizar tanto con el


operador ROLLUP como con CUBE.

Mediante la funcin GROUPING, puede encontrar los


grupos que forman el subtotal en una fila.

Mediante la funcin GROUPING, puede diferenciar los


valores NULL almacenados de los valores NULL creados
por ROLLUP o CUBE.

La funcin GROUPING devuelve 0 1.


17-11

Ejemplo de Funcin GROUPING


SELECT

department_id DEPTID, job_id JOB,


SUM(salary),
GROUPING(department_id) GRP_DEPT,
GROUPING(job_id) GRP_JOB
FROM
employees
WHERE
department_id < 50
GROUP BY ROLLUP(department_id, job_id);

2
3

17-12

GROUPING SETS
GROUPING SETS es otra extensin de la clusula GROUP BY.
Puede utilizar GROUPING SETS para definir varios
agrupamientos en la misma consulta.

Oracle Server calcula todos los agrupamientos

especificados en la clusula GROUPING SETS y combina los


resultados de agrupamientos individuales con una
operacin UNION ALL.

Eficacia del juego de agrupamientos:

17-13

Solamente se necesita una transferencia a la tabla


base.

No es necesario escribir sentencias UNION complejas.

Cuantos ms elementos tenga GROUPING SETS, mayor


ser el beneficio en el rendimiento.

Ejemplo de GROUPING SETS


SELECT

department_id, job_id,
manager_id,avg(salary)
FROM
employees
GROUP BY GROUPING SETS
((department_id,job_id), (job_id,manager_id));

17-15

Columnas Compuestas
Una columna compuesta es una recopilacin de
columnas que se tratan como una unidad.
ROLLUP (a,(b,c) , d)

Para especificar columnas compuestas, utilice la

clusula GROUP BY para agrupar las columnas entre


parntesis para que Oracle Server las trate como una
unidad mientras calcula operaciones CUBE o ROLLUP.

Al utilizar columnas compuestas con ROLLUP o CUBE, se


ignoran agregados en ciertos niveles.

17-17

Ejemplo de Columnas Compuestas


SELECT

department_id, job_id, manager_id,


SUM(salary)
FROM
employees
GROUP BY ROLLUP( department_id,(job_id, manager_id));

17-19

Agrupamientos Concatenados
Los agrupamientos concatenados ofrecen una manera
concisa de generar combinaciones tiles de
agrupamientos.

Para especificar juegos de agrupamientos


concatenados, separe varios juegos de
agrupamientos y operaciones CUBE y ROLLUP con
comas para que Oracle Server los combine en una
nica clusula 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)

17-21

Ejemplo de Agrupamientos Concatenados


SELECT

department_id, job_id, manager_id,


SUM(salary)
FROM
employees
GROUP BY department_id,
ROLLUP(job_id),
CUBE(manager_id);

1
2
3
4

17-22

Resumen
En esta leccin, debera haber aprendido a:
Utilizar la operacin ROLLUP para producir
valores subtotales
Utilizar la operacin CUBE para producir valores de
tabulacin cruzada
Utilizar la funcin GROUPING para identificar los valores
de fila creados por ROLLUP o CUBE
Utilizar la sintaxis GROUPING SETS para definir varios
agrupamientos en la misma consulta
Utilizar la clusula GROUP BY para combinar expresiones
de varias formas:
Columnas compuestas
Juegos de agrupamientos concatenados

17-23

Visin General de la Prctica 17

Esta prctica cubre los siguientes temas:

17-24

Uso del operador ROLLUP


Uso del operador CUBE
Uso de la funcin GROUPING

Uso de GROUPING SETS