Concepto
A veces necesitas trabajar sobre un resumen, no sobre la tabla original: primero calcular algo por grupo y después filtrar, unir u ordenar ese resultado. Una subconsulta en FROM funciona como una tabla temporal hecha con otra consulta.
SELECT r.columna
FROM (SELECT ... GROUP BY ...) AS r
WHERE r.columna > valor;1. El resumen. Escribe y ejecuta primero la consulta que agrupa.
SELECT estudiante_id, COUNT(*) AS cursos_tomados FROM inscripciones GROUP BY estudiante_id;2. Usarlo como tabla. Entre paréntesis, en el FROM, con un alias obligatorio. Desde afuera, sus columnas se leen como las de cualquier tabla: r.cursos_tomados.
SELECT r.estudiante_id, r.cursos_tomados
FROM (SELECT estudiante_id, COUNT(*) AS cursos_tomados FROM inscripciones GROUP BY estudiante_id) AS r
WHERE r.cursos_tomados >= 2;3. Unirlo con otra tabla. El resumen tiene ids; para mostrar nombres, se une con un JOIN como cualquier tabla.
SELECT e.nombre, r.cursos_tomados
FROM (SELECT estudiante_id, COUNT(*) AS cursos_tomados FROM inscripciones GROUP BY estudiante_id) AS r
JOIN estudiantes AS e ON e.id = r.estudiante_id
WHERE r.cursos_tomados >= 2;Otra forma de lo mismo. Este filtro también se puede escribir con GROUP BY y HAVING. La subconsulta brilla cuando el resumen se vuelve a usar: unirlo con otra tabla, filtrarlo varias veces o resumirlo de nuevo. En la próxima lección verás WITH, que hace lo mismo y se lee mejor.
> tarea SQL
Lista los cursos con un promedio de 5.5 o más, con el título del curso y su promedio redondeado a 2 decimales. Calcula el promedio por curso en una subconsulta dentro de FROM y únela con cursos para obtener el título.
Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.