Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
TENIENDO | Agrupamiento
SQL Intermedio
course content

Contenido del Curso

SQL Intermedio

SQL Intermedio

1. Agrupamiento
2. Subconsultas Anidadas
3. Uniendo Tablas
4. DDL y DML en SQL

book
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í:

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

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:

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

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 columna department.

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:

  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 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:

Tarea
test

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.

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!

Sección 1. Capítulo 6
toggle bottom row

book
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í:

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

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:

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

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 columna department.

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:

  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 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:

Tarea
test

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.

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!

Sección 1. Capítulo 6
Switch to desktopCambia al escritorio para practicar en el mundo realContinúe desde donde se encuentra utilizando una de las siguientes opciones
We're sorry to hear that something went wrong. What happened?
some-alt