Está en la página 1de 28

Agregado de Datos utilizando funciones de

grupo

Copyright © 2007, Oracle. All rights reserved.


Objectivos

Después de completar esta lección, usted debería ser capaz


de hacer lo siguiente:
• Identificar las funciones de grupo disponibles.
• Describir el uso de las funciones de grupo.
• Agrupar datos usando la cláusula GROUP BY.
• Incluir o excluir filas agrupadas utilizando la cláusula
HAVING.

5-2 Copyright © 2007, Oracle. All rights reserved.


Agenda

• Funciones de grupo:
– Tipos y sintaxis
– Uso AVG, SUM, MIN, MAX, COUNT
– Uso de la palabra clave DISTINCT dentro de las funciones
de grupo.
– Los valores NULL en las funciones de grupo
• Agrupación de filas:
– cláusula GROUP BY
– cláusula HAVING
• Anidación de funciones de grupo

5-3 Copyright © 2007, Oracle. All rights reserved.


Qué son las funciones de grupo?

Las funciones de grupo operan sobre un conjunto de filas para


dar un resultado por grupo.
EMPLOYEES

Maximum salary in
EMPLOYEES table

5-4 Copyright © 2007, Oracle. All rights reserved.


Tipos de funciones de grupo

• AVG
• COUNT
• MAX
• MIN
Funciones de
• STDDEV grupo
• SUM
• VARIANCE

5-5 Copyright © 2007, Oracle. All rights reserved.


Funciones de grupo: Sintaxis

SELECT group_function(column), ...


FROM table
[WHERE condition]
[ORDER BY column];

5-6 Copyright © 2007, Oracle. All rights reserved.


Uso de las funciones AVG y SUM

Puede utilizar AVG and SUM para datos numéricos.

SELECT AVG(salary), MAX(salary),


MIN(salary), SUM(salary)
FROM employees
WHERE job_id LIKE '%REP%';

5-7 Copyright © 2007, Oracle. All rights reserved.


Uso de las funciones MIN y MAX

Puede utilizar MIN y MAX para datos de tipo numéricos,


carácter o fecha.

SELECT MIN(hire_date), MAX(hire_date)


FROM employees;

5-8 Copyright © 2007, Oracle. All rights reserved.


Uso de la función COUNT

COUNT(*) retorna el número de filas en la tabla:


SELECT COUNT(*)
1 FROM employees
WHERE department_id = 50;

COUNT(expr) retorna el número de filas con valores NO-nulos


para expr:
SELECT COUNT(commission_pct)
2 FROM employees
WHERE department_id = 80;

5-9 Copyright © 2007, Oracle. All rights reserved.


Uso de la palabra clave DISTINCT

• COUNT(DISTINCT expr) retorna el número de valores


distintos y NO-nulos de expr.
• Para mostrar el número de valores de departamentos
diferentes en la tabla EMPLOYEES:

SELECT COUNT(DISTINCT department_id)


FROM employees;

5 - 10 Copyright © 2007, Oracle. All rights reserved.


Funciones de grupo y valores nulos

Las funciones de grupo ignoran los valores null en la columna:


SELECT AVG(commission_pct)
1 FROM employees;

La función NVL fuerza a incluir los valores null:

SELECT AVG(NVL(commission_pct, 0))


2 FROM employees;

5 - 11 Copyright © 2007, Oracle. All rights reserved.


Agenda

• Funciones de grupo:
– Tipos y sintaxis
– Uso AVG, SUM, MIN, MAX, COUNT
– Uso de la palabra clave DISTINCT dentro de las funciones de
grupo.
– Los valores NULL en las funciones de grupo
• Agrupación de filas:
– cláusula GROUP BY
– cláusula HAVING
• Anidación de funciones de grupo

5 - 12 Copyright © 2007, Oracle. All rights reserved.


Creación de grupos de datos

EMPLOYEES

4400
Media de salario en la
tabla EMPLOYEES para
9500
cada departmento

3500

6400

10033

5 - 13 Copyright © 2007, Oracle. All rights reserved.


Creación de grupos de datos:
Sintaxis Cláusula GROUP BY

SELECT column, group_function(column)


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
Puede dividir las filas de una tabla en grupos más pequeños
mediante el uso de la cláusula GROUP BY.

5 - 14 Copyright © 2007, Oracle. All rights reserved.


Uso de la cláusula GROUP BY

Todas la columnas que en la parte SELECT y no estén dentro


de una función de grupo deben aparecer en el GROUP BY.

SELECT department_id, AVG(salary)


FROM employees
GROUP BY department_id ;

5 - 15 Copyright © 2007, Oracle. All rights reserved.


Uso de la cláusula GROUP BY

Las columnas que estén en el GROUP BY pueden no aparecen


en la cláusula SELECT.
SELECT AVG(salary)
FROM employees
GROUP BY department_id ;

5 - 16 Copyright © 2007, Oracle. All rights reserved.


Agrupar por más de una columna

EMPLOYEES Añadir los salarios en la tabla


EMPLOYEES para cada trabajo,
agrupado por departamento.

5 - 17 Copyright © 2007, Oracle. All rights reserved.


Uso de la cláusula GROUP BY
sobre múltiples columnas

SELECT department_id dept_id, job_id, SUM(salary)


FROM employees
GROUP BY department_id, job_id
ORDER BY department_id;

5 - 18 Copyright © 2007, Oracle. All rights reserved.


Consulta ilegales
usando funciones de grupo
Cualquier columna o expresión en la lista SELECT que no es
una función de agregado debe estar en la cláusula GROUP BY:

SELECT department_id, COUNT(last_name)


FROM employees;
Una cláusula GROUP BY deben
añadirse para contar los apellidos de
cada department_id.

SELECT department_id, job_id, COUNT(last_name)


FROM employees
GROUP BY department_id;

Puede añadir job_id en GROUP BY o


retirar la columna job_id de la lista
SELECT.

5 - 19 Copyright © 2007, Oracle. All rights reserved.


Consulta ilegales
usando funciones de grupo
• No puede utilizar la cláusula WHERE para filtrar grupos.
• Puede utilizar la cláusula HAVING para filtrar grupos.
• No utilizar funciones de grupo en la cláusula WHERE.
SELECT department_id, AVG(salary)
FROM employees
WHERE AVG(salary) > 8000
GROUP BY department_id;

Cannot use the


WHERE clause to
restrict groups

5 - 20 Copyright © 2007, Oracle. All rights reserved.


Filtrar los grupos resultantes

EMPLOYEES

El salario máximo por


departamento cuando
sea mayor de $10,000

5 - 21 Copyright © 2007, Oracle. All rights reserved.


Restricción de resultados
con la cláusula HAVING
Cuando utiliza la cláusula HAVING, el servidor Oracle filtra los
grupos de la siguiente manera:
1. Las filas son agrupadas.
2. La función de grupo se aplica.
3. Los grupos que cumplan la cláusula HAVING se muestran.

SELECT column, group_function


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

5 - 22 Copyright © 2007, Oracle. All rights reserved.


Uso de la cláusula HAVING

SELECT department_id, MAX(salary)


FROM employees
GROUP BY department_id
HAVING MAX(salary)>10000 ;

5 - 23 Copyright © 2007, Oracle. All rights reserved.


Uso de la cláusula HAVING

SELECT job_id, SUM(salary) PAYROLL


FROM employees
WHERE job_id NOT LIKE '%REP%'
GROUP BY job_id
HAVING SUM(salary) > 13000
ORDER BY SUM(salary);

5 - 24 Copyright © 2007, Oracle. All rights reserved.


Agenda

• Funciones de grupo:
– Tipos y sintaxis
– Uso AVG, SUM, MIN, MAX, COUNT
– Uso de la palabra clave DISTINCT dentro de las
funciones de grupo.
– Los valores NULL en las funciones de grupo
• Agrupación de filas:
– cláusula GROUP BY
– cláusula HAVING
• Anidación de funciones de grupo

5 - 25 Copyright © 2007, Oracle. All rights reserved.


Anidación de funciones de grupo

Mostrar la máxima media de salario:

SELECT MAX(AVG(salary))
FROM employees
GROUP BY department_id;

5 - 26 Copyright © 2007, Oracle. All rights reserved.


Resumen

En esta lección, usted debe haber aprendido a:


• Utilizar las funciones de grupo COUNT, MAX, MIN, SUM, y
AVG.
• Escribir consultas con la cláusula GROUP BY.
• Escribir consultas utilizando la cláusula HAVING.

SELECT column, group_function


FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[HAVING group_condition]
[ORDER BY column];

5 - 27 Copyright © 2007, Oracle. All rights reserved.


Práctica 5: Información general

Esta práctica abarca los siguientes temas:


• Escribir consultas que utilicen funciones de grupo.
• Agrupación de filas para alcanzar más de un resultado.
• La restricción de los grupos mediante el uso de la cláusula
HAVING.

5 - 28 Copyright © 2007, Oracle. All rights reserved.

También podría gustarte