> lección 13/18 · 14 min

Subconsultas en WHERE

Concepto

"¿Qué cursos duran más que el promedio?" tiene dos pasos: calcular el promedio y después comparar cada curso con él. Una subconsulta hace los dos en una sola consulta: una consulta entre paréntesis dentro de otra.

Sintaxis
SELECT columnas
FROM tabla
WHERE columna > (SELECT AVG(columna) FROM tabla);

Primero, la consulta de adentro. Escríbela y ejecútala sola para ver qué devuelve.

SELECT AVG(horas) AS promedio_horas FROM cursos;

Después, úsala como valor. Entre paréntesis, ocupa el lugar donde escribirías un número. La base la calcula primero y después compara cada fila con el resultado.

SELECT titulo, horas FROM cursos WHERE horas > (SELECT AVG(horas) FROM cursos);

Un umbral que se actualiza solo. Si escribieras el promedio a mano (WHERE horas > 26.57), la consulta quedaría mal apenas se agregue un curso. Con la subconsulta, el umbral se recalcula cada vez.

Un solo valor. Al lado de >, < o =, la subconsulta tiene que devolver una sola fila con una sola columna. Para comparar contra una lista de valores se usa IN (SELECT ...).

SELECT nombre FROM estudiantes WHERE id IN (SELECT estudiante_id FROM inscripciones WHERE estado = 'riesgo');

> tarea SQL

La coordinación quiere ofrecer tutorías a quienes rindieron bajo el promedio. Lista las inscripciones con una nota menor al promedio general de todas las notas, con el nombre del estudiante y la nota.

Tablas disponibles
  • cursos: id, titulo, nivel, horas
  • estudiantes: id, nombre, correo, edad, ciudad
  • inscripciones: id, estudiante_id, curso_id, nota, estado

Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.

Aprueba las tareas de esta lección para ver el cierre.