Filtrado de Grupos Agregados con HAVING
Comprende por qué WHERE no puede filtrar sobre funciones agregadas, cómo actúa HAVING después del agrupamiento y el orden de ejecución completo de una consulta SQL.
¿Por qué existe HAVING si ya tenemos WHERE?
La cláusula WHERE se introdujo en SQL para filtrar filas individuales antes de que ocurra cualquier agrupamiento o cálculo agregado. Por esa razón arquitectónica, es ilegal escribir WHERE COUNT(*) > 1.
La cláusula HAVING se diseñó específicamente para filtrar sobre los resultados calculados por las funciones agregadas después de que GROUP BY ha procesado los grupos.
Diferencias Clave: WHERE vs HAVING
| Criterio | Cláusula WHERE | Cláusula HAVING |
|---|---|---|
| Momento de ejecución | Antes de agrupar los datos. | Después de agrupar y calcular agregados. |
| Aplica sobre | Filas individuales de las tablas. | Grupos consolidados por GROUP BY. |
| ¿Admite funciones agregadas? | No (Genera error de sintaxis). | Sí (COUNT, AVG, SUM, etc.). |
El Orden de Ejecución Completo en SQL
SELECT columna, COUNT(*)
FROM tabla
WHERE condicion_filas_individuales -- 1º Filtra filas base
GROUP BY columna -- 2º Agrupa categorías
HAVING COUNT(*) > 1 -- 3º Filtra los grupos calculados
ORDER BY COUNT(*) DESC -- 4º Ordena el resultado final
LIMIT 10; -- 5º Recorta el número de filas
Diagrama 11.1: Los 8 pasos de ejecución lógica del motor MySQL y resolución de alias con WHERE vs HAVING.
⚡ Filtrado de Ciudades con más de 1 Estudiante usando HAVING
Agrupa los estudiantes por ciudad y filtra con HAVING para mostrar únicamente las ciudades con comunidades activas:
-- Filtrar grupos agregados que cumplan la condición de volumen
SELECT
ciudad,
COUNT(*) AS total_estudiantes_registrados,
ROUND(AVG(edad), 1) AS edad_promedio
FROM estudiantes
GROUP BY ciudad
HAVING COUNT(*) >= 1
ORDER BY total_estudiantes_registrados DESC;
Mini-Quiz de Retención
Comprueba tu comprensión antes de pasar a la siguiente lección¿Por qué produce un error de sintaxis escribir WHERE COUNT(*) > 5 en lugar de HAVING COUNT(*) > 5?
¿Tienes dudas con este tema?
Sócrates AI puede darte analogías y explicarte este código paso a paso.🚀 ¿Quieres dominar Manual Completo de SQL & MySQL y crear proyectos reales?
Aprende arquitectura limpia, desarrollo web moderno, buenas prácticas y despliegue en producción con nuestro Bootcamp Fullstack Developer con mentorías en vivo.
🏛️ Autoría y Propiedad Intelectual: Obra educativa original de David Amador para Kilopolis Academia (Solucionáticos), estructurada sobre las especificaciones y estándares abiertos del W3C, el estándar vivo de WHATWG y la documentación oficial de código abierto. © Todos los derechos reservados.