Concepto
GROUP BY separa las filas en grupos según una columna y calcula las agregaciones dentro de cada grupo. En vez de un promedio para toda la tabla, obtienes un promedio por curso, por ciudad o por estado. Es la tabla dinámica de SQL.
SELECT columna_grupo, AGREGACION(columna) AS alias
FROM tabla
GROUP BY columna_grupo
HAVING condición_sobre_el_grupo;Un resumen por grupo. Cada grupo produce una fila. En el SELECT van la columna del grupo y agregaciones; nada más.
SELECT ciudad, COUNT(*) AS estudiantes FROM estudiantes GROUP BY ciudad;Varias agregaciones por grupo. Igual que en la lección anterior, pero calculadas dentro de cada grupo.
SELECT ciudad, COUNT(*) AS estudiantes, ROUND(AVG(edad), 1) AS edad_promedio FROM estudiantes GROUP BY ciudad;WHERE filtra filas, HAVING filtra grupos. WHERE decide qué filas entran a los grupos, antes de agrupar. HAVING decide qué grupos salen en el resultado, después de calcular. Por eso una condición sobre COUNT(*) o AVG(...) solo puede ir en HAVING.
SELECT ciudad, COUNT(*) AS estudiantes
FROM estudiantes
WHERE edad >= 21
GROUP BY ciudad
HAVING COUNT(*) >= 2;El orden de las cláusulas. SELECT, FROM, JOIN, WHERE, GROUP BY, HAVING, ORDER BY y LIMIT. El ORDER BY puede usar el alias de una agregación.
> tarea SQL
Por cada curso, muestra titulo, inscritos (cuántas inscripciones tiene) y promedio (la nota promedio, redondeada a 2 decimales). Muestra solo los cursos con más de una inscripción, ordenados del promedio más bajo al más alto, para revisar primero los cursos con más dificultades.
Primero intenta: las pistas aparecen después de 2 intentos con un resultado incorrecto (los errores de código no cuentan). Llevas 0.