Cláusula Having
El sistema de información escolar está siendo revisado para garantizar la consistencia y precisión de los datos. Como parte de esta revisión, se ha asignado una nueva tarea de análisis de datos.
Durante las verificaciones rutinarias, se descubrió que algunos registros de estudiantes contienen más de una entrada de calificación, aunque el sistema está diseñado para almacenar solo una calificación por estudiante.
Su tarea es ayudar a identificar estos casos para una revisión interna adicional.
Pensemos juntos en cómo podemos hacer esto. Podría comenzar considerando que podemos hacerlo utilizando una cláusula WHERE, y se vería algo así:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Pero, como se puede observar, se produce un error que indica que no se pueden utilizar funciones de agregación dentro de una cláusula WHERE. Aquí es donde se necesita la cláusula HAVING.
Supongamos que se requiere obtener los departamentos donde el salario promedio de los empleados es inferior a $70,000 por año.
Para lograrlo, es necesario utilizar una función de agregación y la cláusula HAVING:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recibimos un solo departamento como respuesta utilizando la cláusula HAVING, donde establecemos una condición para la columna por la cual agrupamos los datos.
Para utilizar la agregación de datos dentro de la cláusula HAVING, es necesario que exista agrupación de datos en nuestra consulta. Como en la consulta anterior, agrupamos los datos por la columna department.
Veamos la sintaxis más generalizada de la cláusula HAVING y cuándo es más adecuado utilizarla:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Comprendamos también brevemente la diferencia principal entre las cláusulas WHERE y HAVING, y cuándo utilizar cada una:
- La cláusula
WHEREse utiliza antes de la agregación de datos, mientras que la cláusulaHAVINGse utiliza después de la agregación de datos; - La cláusula
WHEREse escribe antes deGROUP BY, mientras que la cláusulaHAVINGse escribe después deGROUP BY.
Estas son las dos diferencias principales que se deben recordar para utilizar correctamente la cláusula HAVING. Ahora, volvamos a la tarea que nos ha dado la escuela.
Swipe to start coding
Algunos estudiantes aparecen varias veces en los registros de calificaciones, lo que indica entradas duplicadas o inesperadas en el sistema.
Es necesario obtener los apellidos de todos los estudiantes cuyos registros contienen más de una entrada de calificación. El resultado será utilizado por la administración escolar para revisar y corregir los datos si es necesario.
Devuelve únicamente la lista de apellidos que cumplen con esta condición, ordenados alfabéticamente.
Instrucciones breves
- Recuperar la columna
student_surname. - Agrupar los datos por
student_surname. - Utilizar la cláusula
HAVINGpara filtrar los resultados segúnCOUNT(grade) > 1. - Ordenar los resultados por
student_surname.
Solución
¡Gracias por tus comentarios!
single
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Genial!
Completion tasa mejorada a 4
Cláusula Having
Desliza para mostrar el menú
El sistema de información escolar está siendo revisado para garantizar la consistencia y precisión de los datos. Como parte de esta revisión, se ha asignado una nueva tarea de análisis de datos.
Durante las verificaciones rutinarias, se descubrió que algunos registros de estudiantes contienen más de una entrada de calificación, aunque el sistema está diseñado para almacenar solo una calificación por estudiante.
Su tarea es ayudar a identificar estos casos para una revisión interna adicional.
Pensemos juntos en cómo podemos hacer esto. Podría comenzar considerando que podemos hacerlo utilizando una cláusula WHERE, y se vería algo así:
123SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
Pero, como se puede observar, se produce un error que indica que no se pueden utilizar funciones de agregación dentro de una cláusula WHERE. Aquí es donde se necesita la cláusula HAVING.
Supongamos que se requiere obtener los departamentos donde el salario promedio de los empleados es inferior a $70,000 por año.
Para lograrlo, es necesario utilizar una función de agregación y la cláusula HAVING:
1234SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
Recibimos un solo departamento como respuesta utilizando la cláusula HAVING, donde establecemos una condición para la columna por la cual agrupamos los datos.
Para utilizar la agregación de datos dentro de la cláusula HAVING, es necesario que exista agrupación de datos en nuestra consulta. Como en la consulta anterior, agrupamos los datos por la columna department.
Veamos la sintaxis más generalizada de la cláusula HAVING y cuándo es más adecuado utilizarla:
SELECT column1, column2 --(optional)
FROM table
GROUP BY column1
HAVING AGG(column_n) --(condition)
Comprendamos también brevemente la diferencia principal entre las cláusulas WHERE y HAVING, y cuándo utilizar cada una:
- La cláusula
WHEREse utiliza antes de la agregación de datos, mientras que la cláusulaHAVINGse utiliza después de la agregación de datos; - La cláusula
WHEREse escribe antes deGROUP BY, mientras que la cláusulaHAVINGse escribe después deGROUP BY.
Estas son las dos diferencias principales que se deben recordar para utilizar correctamente la cláusula HAVING. Ahora, volvamos a la tarea que nos ha dado la escuela.
Swipe to start coding
Algunos estudiantes aparecen varias veces en los registros de calificaciones, lo que indica entradas duplicadas o inesperadas en el sistema.
Es necesario obtener los apellidos de todos los estudiantes cuyos registros contienen más de una entrada de calificación. El resultado será utilizado por la administración escolar para revisar y corregir los datos si es necesario.
Devuelve únicamente la lista de apellidos que cumplen con esta condición, ordenados alfabéticamente.
Instrucciones breves
- Recuperar la columna
student_surname. - Agrupar los datos por
student_surname. - Utilizar la cláusula
HAVINGpara filtrar los resultados segúnCOUNT(grade) > 1. - Ordenar los resultados por
student_surname.
Solución
¡Gracias por tus comentarios!
single