Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Cláusula Having | Agrupación
SQL Intermedio

bookCláusula Having

La escuela está muy agradecida por tu trabajo, y ahora tenemos una nueva tarea.

Resulta que algunos estudiantes tomaron 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 solo una calificación.

Se nos ha encargado obtener los apellidos de estos estudiantes y entregárselos a la administración escolar para que tomen las medidas que consideren necesarias.

Pensemos juntos cómo podemos hacer esto. Podrías empezar considerando que podemos hacerlo usando una cláusula WHERE, y se vería algo así:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Pero, como puedes ver, obtenemos un error que indica que no podemos usar funciones de agregación dentro de una cláusula WHERE. Aquí es donde necesitaremos la cláusula HAVING.

Supongamos que necesitamos obtener los departamentos donde el salario promedio de los empleados es inferior a $70,000 por año. Para lograr esto, necesitaremos usar una función de agregación y la cláusula HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Recibimos un departamento como resultado utilizando la cláusula HAVING, donde establecemos una condición para la columna por la que agrupamos los datos.

Nota

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 mejor 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 de ellas:

  1. La cláusula WHERE se utiliza antes de la agregación de datos, mientras que la cláusula HAVING se utiliza después de la agregación de datos;
  2. La cláusula WHERE se escribe antes de GROUP BY, mientras que la cláusula HAVING se escribe después de GROUP BY.

Estas son las dos diferencias principales que debes recordar para utilizar correctamente la cláusula HAVING. Ahora, volvamos a la tarea que nos asignó la escuela.

Tarea

Swipe to start coding

Tu tarea será obtener los apellidos de los estudiantes que tienen múltiples calificaciones en la escuela.

Solo necesitas recuperar los apellidos de los estudiantes; no es necesario incluir la cantidad 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 en orden alfabético.

Nota:

El resultado debe contener solo una columna con los apellidos.

Instrucciones breves

  • Recuperar la columna student_surname.
  • Agrupar los datos por student_surname.
  • Utilizar la cláusula HAVING para filtrar los resultados según COUNT(grade) > 1.
  • Ordenar los resultados por student_surname.

Solución

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6
single

single

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

close

Awesome!

Completion rate improved to 4

bookCláusula Having

Desliza para mostrar el menú

La escuela está muy agradecida por tu trabajo, y ahora tenemos una nueva tarea.

Resulta que algunos estudiantes tomaron 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 solo una calificación.

Se nos ha encargado obtener los apellidos de estos estudiantes y entregárselos a la administración escolar para que tomen las medidas que consideren necesarias.

Pensemos juntos cómo podemos hacer esto. Podrías empezar considerando que podemos hacerlo usando una cláusula WHERE, y se vería algo así:

123
SELECT student_surname FROM student_grades WHERE COUNT(grade) > 1
copy

Pero, como puedes ver, obtenemos un error que indica que no podemos usar funciones de agregación dentro de una cláusula WHERE. Aquí es donde necesitaremos la cláusula HAVING.

Supongamos que necesitamos obtener los departamentos donde el salario promedio de los empleados es inferior a $70,000 por año. Para lograr esto, necesitaremos usar una función de agregación y la cláusula HAVING:

1234
SELECT department FROM employees GROUP BY department HAVING AVG(salary) < 70000
copy

Recibimos un departamento como resultado utilizando la cláusula HAVING, donde establecemos una condición para la columna por la que agrupamos los datos.

Nota

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 mejor 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 de ellas:

  1. La cláusula WHERE se utiliza antes de la agregación de datos, mientras que la cláusula HAVING se utiliza después de la agregación de datos;
  2. La cláusula WHERE se escribe antes de GROUP BY, mientras que la cláusula HAVING se escribe después de GROUP BY.

Estas son las dos diferencias principales que debes recordar para utilizar correctamente la cláusula HAVING. Ahora, volvamos a la tarea que nos asignó la escuela.

Tarea

Swipe to start coding

Tu tarea será obtener los apellidos de los estudiantes que tienen múltiples calificaciones en la escuela.

Solo necesitas recuperar los apellidos de los estudiantes; no es necesario incluir la cantidad 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 en orden alfabético.

Nota:

El resultado debe contener solo una columna con los apellidos.

Instrucciones breves

  • Recuperar la columna student_surname.
  • Agrupar los datos por student_surname.
  • Utilizar la cláusula HAVING para filtrar los resultados según COUNT(grade) > 1.
  • Ordenar los resultados por student_surname.

Solución

Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

close

Awesome!

Completion rate improved to 4
Sección 1. Capítulo 6
single

single

some-alt