les17 group byf

20
Mejoras de la Cláusula GROUP BY 

Upload: patricia-v-ap

Post on 27-Feb-2018

232 views

Category:

Documents


0 download

TRANSCRIPT

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 1/20

Mejoras de la CláusulaGROUP BY 

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 2/20

17-2

Objetivos

Al finalizar esta lección, debería estar capacitadopara:

• Utilizar la operación ROLLUP para producir

valores subtotales

• Utilizar la operación CUBE para producir valores de

tabulación cruzada

• Utilizar la función GROUPING para identificar los valoresde fila creados por ROLLUP o CUBE 

•Utilizar GROUPING SETS para producir un único juegode resultados

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 3/20

17-3

Revisión de Funciones de Grupo

Las funciones de grupo operan en juegos de filas paraproporcionar un resultado por grupo.

SELECT [column,] group_function(column). . . 

FROM table 

[WHERE condition]

[GROUP BY group_by_expression]

[ORDER BY column];

SELECT AVG(salary), STDDEV(salary),

COUNT(commission_pct),MAX(hire_date)

FROM employees

 WHERE job_id LIKE 'SA%';

Ejemplo:

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 4/20

17-4

Revisión de la Cláusula GROUP BY 

SELECT department_id, job_id, SUM(salary),COUNT(employee_id)

FROM employees

GROUP BY department_id, job_id ;

SELECT [column,]

FROM table 

[WHERE condition]

[GROUP BY group_by_expression][ORDER BY column];

Ejemplo:

Sintaxis:

group_function(column). . .

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 5/20

17-5

Revisión de la Cláusula HAVING 

• Utilice la cláusula HAVING para especificar qué grupos

se van a mostrar.

• Restringe aún más los grupos basándose en una

condición limitadora.

SELECT [column,] group_function(column)...

FROM table 

[WHERE condition]

[GROUP BY group_by_expression]

[HAVING having_expression]

[ORDER BY column];

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 6/20

17-6

GROUP BY con operadores

CUBE y ROLLUP 

• Utilice ROLLUP o CUBE con GROUP BY para producir filas

superagregadas realizando referencias cruzadas decolumnas.

•El agrupamiento ROLLUP produce un juego deresultados que contiene las filas agrupadas normales ylos valores subtotales.

• El agrupamiento CUBE produce un juego de resultadosque contiene las filas de ROLLUP y las de tabulación

cruzada.

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 7/2017-7

Operador ROLLUP 

• ROLLUP es una extensión de la cláusula GROUP BY.

• Utilice la operación ROLLUP para producir agregados

acumulativos como, por ejemplo, subtotales.

SELECT [column,] group_function(column). . . 

FROM table 

[WHERE condition]

[GROUP BY [ROLLUP] group_by_expression]

[HAVING having_expression];

[ORDER BY column];

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 8/2017-8

Ejemplo de Operator ROLLUP 

SELECT department_id, job_id, SUM(salary)FROM employees

 WHERE department_id < 60GROUP BY ROLLUP(department_id, job_id);

12

3

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 9/2017-9

Operador CUBE 

• CUBE es una extensión de la cláusula GROUP BY.

• Puede utilizar el operador CUBE para producir valores

de tabulación cruzada con una única sentencia SELECT.

SELECT [column,] group_function(column)... 

FROM table 

[WHERE condition]

[GROUP BY [CUBE] group_by_expression]

[HAVING having_expression][ORDER BY column];

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 10/2017-10

Ejemplo de Operador CUBE 

SELECT department_id, job_id, SUM(salary)

FROM employees WHERE department_id < 60

GROUP BY CUBE (department_id, job_id) ;

1

2

3

4

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 11/2017-11

Función GROUPING 

• La función GROUPING se puede utilizar tanto con eloperador ROLLUP como con CUBE.

• Mediante la función GROUPING, puede encontrar los

grupos que forman el subtotal en una fila.

• Mediante la función GROUPING, puede diferenciar losvalores NULL almacenados de los valores NULL creadospor ROLLUP o CUBE.

• La función GROUPING devuelve 0 ó 1.

SELECT [column,] group_function(column) . ,

GROUPING(expr)FROM table 

[WHERE condition]

[GROUP BY [ROLLUP][CUBE] group_by_expression][HAVING having_expression]

[ORDER BY column];

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 12/2017-12

Ejemplo de Función 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);

21

3

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 13/2017-13

GROUPING SETS

• GROUPING SETS es otra extensión de la cláusula GROUP BY.

• Puede utilizar GROUPING SETS para definir varios

agrupamientos en la misma consulta.

• Oracle Server calcula todos los agrupamientosespecificados en la cláusula GROUPING SETS y combina los

resultados de agrupamientos individuales con unaoperación UNION ALL.

• Eficacia del juego de agrupamientos:

 – Solamente se necesita una transferencia a la tabla

base. – No es necesario escribir sentencias UNION complejas.

 – Cuantos más elementos tenga GROUPING SETS, mayor

será el beneficio en el rendimiento.

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 14/2017-15

Ejemplo de GROUPING SETS 

SELECT department_id, job_id, manager_id,avg(salary)

FROM employeesGROUP BY GROUPING SETS

((department_id,job_id), (job_id,manager_id));

1

2

… 

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 15/2017-17

Columnas Compuestas

• Una columna compuesta es una recopilación decolumnas que se tratan como una unidad.

ROLLUP (a, , d)

• Para especificar columnas compuestas, utilice lacláusula GROUP BY para agrupar las columnas entre

paréntesis para que Oracle Server las trate como unaunidad mientras calcula operaciones CUBE o ROLLUP.

• Al utilizar columnas compuestas con ROLLUP o CUBE, se

ignoran agregados en ciertos niveles.

(b,c) 

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 16/2017-19

Ejemplo de Columnas Compuestas

SELECT department_id, job_id, manager_id,

SUM(salary)

FROM employees

GROUP BY ROLLUP( department_id,(job_id, manager_id));

21

3…

 

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 17/2017-21

Agrupamientos Concatenados

• Los agrupamientos concatenados ofrecen una maneraconcisa de generar combinaciones útiles deagrupamientos.

• Para especificar juegos de agrupamientos

concatenados, separe varios juegos deagrupamientos y operaciones CUBE y ROLLUP con

comas para que Oracle Server los 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)

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 18/2017-22

… 

… 

… 

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

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 19/2017-23

Resumen

En esta lección, debería haber aprendido a:• Utilizar la operación ROLLUP para producir

valores subtotales

• Utilizar la operación CUBE para producir valores de

tabulación cruzada

• Utilizar la función GROUPING para identificar los valoresde fila creados por ROLLUP o CUBE 

• Utilizar la sintaxis GROUPING SETS para definir varios

agrupamientos en la misma consulta

• Utilizar la cláusula GROUP BY para combinar expresiones

de varias formas:

 – Columnas compuestas

 – Juegos de agrupamientos concatenados

7/25/2019 Les17 Group Byf

http://slidepdf.com/reader/full/les17-group-byf 20/2017 24

Visión General de la Práctica 17

Esta práctica cubre los siguientes temas:

• Uso del operador ROLLUP 

• Uso del operador CUBE 

•Uso de la función GROUPING 

• Uso de GROUPING SETS