Contenido del Curso
SQL Intermedio
SQL Intermedio
TENIENDO
La escuela está muy agradecida por su trabajo, y ahora hay una nueva tarea para nosotros.
Resulta que algunos estudiantes hicieron exámenes adicionales cuando se suponía que debían tomar solo uno. La escuela los sospecha de hacer trampa porque cada estudiante debería tener únicamente una calificación.
Nuestra tarea es obtener los apellidos de estos estudiantes y pasarlos a la administración escolar para que tomen las medidas que consideren necesarias.
Reflexionemos juntos sobre cómo podemos hacer esto. Podrías comenzar considerando que podemos hacer esto utilizando una cláusula WHERE
, y luciría algo así:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Sin embargo, como puedes ver, obtenemos un error que indica que no podemos usar funciones agregadas dentro de una cláusula WHERE
. Aquí es donde necesitaremos la cláusula HAVING
.
Vamos a entender qué es y cómo usarla, utilizando un ejemplo de nuestra tabla employee
.
Digamos que necesitamos recuperar los departamentos donde el salario promedio de los empleados es inferior a $70,000 al año.
Para lograr esto, necesitaremos usar una función agregada y la cláusula HAVING
.
Veamos cómo podemos hacerlo:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recibimos un departamento como respuesta utilizando la cláusula HAVING
, donde establecimos una condición para la columna por la cual agrupamos los datos.
Nota
Para usar la agregación de datos dentro de la cláusula
HAVING
, necesitamos tener agrupación de datos en nuestra consulta. Como en la consulta anterior, agrupamos los datos por la columnadepartment
.
Veamos la sintaxis más generalizada de la cláusula HAVING
y cuándo es mejor utilizarla:
Comprendamos brevemente la diferencia principal entre las cláusulas WHERE
y HAVING
y cuándo usar cada una de ellas:
- La cláusula
WHERE
se utiliza antes de la agregación de datos, mientras que la cláusulaHAVING
se utiliza después de la agregación de datos; - La cláusula
WHERE
se escribe antes deGROUP BY
, mientras que la cláusulaHAVING
se escribe después deGROUP BY
.
Estas son las dos diferencias principales que debes recordar para el uso exitoso de la cláusula HAVING
. Ahora, volvamos a la tarea que la escuela nos ha dado.
Aquí tienes una vista previa de una tabla student_grades
con la que estamos trabajando:
Swipe to show code editor
Necesitas obtener los apellidos de los estudiantes que tienen varias calificaciones para la escuela.
Solo necesitas recuperar los apellidos de los estudiantes; no es necesario incluir el conteo de sus calificaciones en la respuesta. Utiliza la cláusula HAVING
y la función agregada COUNT()
para realizar esta tarea. Luego, ordena los apellidos alfabéticamente.
Nota:
Debes tener solo una columna con apellidos en el resultado.
¡Gracias por tus comentarios!
TENIENDO
La escuela está muy agradecida por su trabajo, y ahora hay una nueva tarea para nosotros.
Resulta que algunos estudiantes hicieron exámenes adicionales cuando se suponía que debían tomar solo uno. La escuela los sospecha de hacer trampa porque cada estudiante debería tener únicamente una calificación.
Nuestra tarea es obtener los apellidos de estos estudiantes y pasarlos a la administración escolar para que tomen las medidas que consideren necesarias.
Reflexionemos juntos sobre cómo podemos hacer esto. Podrías comenzar considerando que podemos hacer esto utilizando una cláusula WHERE
, y luciría algo así:
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Sin embargo, como puedes ver, obtenemos un error que indica que no podemos usar funciones agregadas dentro de una cláusula WHERE
. Aquí es donde necesitaremos la cláusula HAVING
.
Vamos a entender qué es y cómo usarla, utilizando un ejemplo de nuestra tabla employee
.
Digamos que necesitamos recuperar los departamentos donde el salario promedio de los empleados es inferior a $70,000 al año.
Para lograr esto, necesitaremos usar una función agregada y la cláusula HAVING
.
Veamos cómo podemos hacerlo:
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recibimos un departamento como respuesta utilizando la cláusula HAVING
, donde establecimos una condición para la columna por la cual agrupamos los datos.
Nota
Para usar la agregación de datos dentro de la cláusula
HAVING
, necesitamos tener agrupación de datos en nuestra consulta. Como en la consulta anterior, agrupamos los datos por la columnadepartment
.
Veamos la sintaxis más generalizada de la cláusula HAVING
y cuándo es mejor utilizarla:
Comprendamos brevemente la diferencia principal entre las cláusulas WHERE
y HAVING
y cuándo usar cada una de ellas:
- La cláusula
WHERE
se utiliza antes de la agregación de datos, mientras que la cláusulaHAVING
se utiliza después de la agregación de datos; - La cláusula
WHERE
se escribe antes deGROUP BY
, mientras que la cláusulaHAVING
se escribe después deGROUP BY
.
Estas son las dos diferencias principales que debes recordar para el uso exitoso de la cláusula HAVING
. Ahora, volvamos a la tarea que la escuela nos ha dado.
Aquí tienes una vista previa de una tabla student_grades
con la que estamos trabajando:
Swipe to show code editor
Necesitas obtener los apellidos de los estudiantes que tienen varias calificaciones para la escuela.
Solo necesitas recuperar los apellidos de los estudiantes; no es necesario incluir el conteo de sus calificaciones en la respuesta. Utiliza la cláusula HAVING
y la función agregada COUNT()
para realizar esta tarea. Luego, ordena los apellidos alfabéticamente.
Nota:
Debes tener solo una columna con apellidos en el resultado.
¡Gracias por tus comentarios!