Está en la página 1de 5

Luis Fernando Bermúdez García

academy.oracle.com

Programación de Bases de Datos con SQL


9.1: Uso de las Cláusulas GROUP BY y
HAVING Actividades de Práctica

Objetivos
 Crear y ejecutar una consulta SQL utilizando GROUP BY
 Crear y ejecutar una consulta SQL utilizando GROUP BY … HAVING
 Crear y ejecutar GROUP BY en más de una columna
 Anidar funciones de grupo

Terminología
Identifique el término para cada una de las siguientes definiciones.

HAVING Se utiliza para especificar qué grupos se van a mostrar; restringe


los grupos que no cumplen los criterios del grupo
GROUP BY Divide las filas de una tabla en grupos

Inténtelo/Resuélvalo

1. En la consulta SQL siguiente, ¿cuál de las siguientes afirmaciones es verdadera sobre


esta consulta?

a. Kimberly Grant no aparecería en el juego de resultados. (Solo esta es


verdadera)
b. La cláusula GROUP BY tiene un error porque manager_id no se incluye en la
cláusula SELECT.
c. Solo los salarios superiores a 16001 estarán en el juego de resultados.
d. Los nombres que empiecen por Ki aparecerán después de los nombres que
empiecen por Ko.
e. Apellidos tales como King y Kochhar se devolverán aunque no tengan
salarios > 16000.

SELECT last_name, MAX(salary)


FROM employees
WHERE last_name LIKE 'K%'
GROUP BY manager_id, last_name
Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
Luis Fernando Bermúdez García

HAVING MAX(salary) >16000

Copyright © 2019, Oracle y/o sus filiales. Todos los derechos reservados. Oracle y Java son marcas comerciales registradas de Oracle y sus filiales. Todos los demás nombres pueden ser
marcas comerciales de sus respectivos propietarios.
2

ORDER BY last_name DESC ;

2. Cada una de las siguientes consultas SQL tiene un error. Busque el error y corríjalo.
Utilice Oracle Application Express para verificar que sus correcciones producen los
resultados deseados.

a. SELECT manager_id
FROM employees
WHERE AVG(salary) <16000
GROUP BY manager_id;

*SELECT manager_id,AVG(salary)
FROM employees
GROUP BY manager_id
HAVING AVG(salary) <16000;

b. SELECT cd_number, COUNT(title)


FROM d_cds
WHERE cd_number < 93;

*SELECT COUNT(*)
FROM d_cds
WHERE cd_number < 93;

c. SELECT ID, MAX(ID), artist AS Artist


FROM d_songs
WHERE duration IN('3 min', '6 min', '10 min')
HAVING ID < 50
GROUP by ID;

d. SELECT loc_type, rental_fee AS Fee


FROM d_venues
WHERE id <100
GROUP BY "Fee"
ORDER BY 2;
*No logre encontrar el
erro en los ultimos 2
3

3. Reescriba la siguiente consulta para obtener el mismo

resultado: SELECT DISTINCT MAX(song_id)


FROM d_track_listings
WHERE track IN ( 1, 2, 3);

*SELECT track, MAX(song_id)


FROM d_track_listings
WHERE track IN ( 1, 2, 3)
GROUP BY track;

4. Indique si es Verdadero o Falso


V a. Si incluye una función de grupo y cualquier otra columna individual en una
cláusula SELECT, cada columna individual también debe aparecer en la
cláusula GROUP BY.
F b. Puede utilizar un alias de columna en la cláusula GROUP BY.
V c. La cláusula GROUP BY siempre incluye una función de grupo.

5. Escriba una consulta que devuelva el salario medio máximo y el mínimo agrupados
por departamento de la tabla employees.

SELECT ROUND(MAX(AVG(salary))) as "Maximum Average of Departments",


ROUND(MIN(AVG(salary))) "Minimum Average of Departments"
FROM employees
GROUP BY department_id;

6. Escriba una consulta que devuelva la media de los salarios máximos de cada
departamento para la tabla employees.

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