Tutorial de SQL
Cómo usar HAVING en SQL (y en qué se diferencia de WHERE)
HAVING filtra grupos ya formados: va justo después del GROUP BY y su condición usa funciones de agregado, como HAVING COUNT(*) >= 3. WHERE, en cambio, filtra filas antes de agrupar. Aquí verás la sintaxis, un ejemplo resuelto con las ciudades donde viven tres alumnos o más y por qué WHERE COUNT(*) da error.
HAVING: filtrar grupos
WHERE filtra filas antes de agrupar. Pero a veces la condición es sobre el resumen del grupo («proveedores con 3 productos o más»), y ese número solo existe después del GROUP BY.
Para eso está HAVING: va justo después del GROUP BY y su condición usa funciones de agregado, como HAVING COUNT(*) >= 3.
Cómo se escribe
SELECT columna, COUNT(*) FROM tabla GROUP BY columna HAVING COUNT(*) >= 3
- GROUP BY columna
- forma los grupos
- HAVING
- filtra los grupos ya formados
- COUNT(*) >= 3
- solo pasan los grupos con 3 filas o más
Ejemplo resuelto
SELECT ciudad, COUNT(*) FROM alumnos GROUP BY ciudad HAVING COUNT(*) >= 3| Número de fila# | ciudad | COUNT(*) |
|---|---|---|
| 1 | Metepec | 3 |
| 2 | Toluca | 4 |
Ciudades donde viven 3 alumnos o más.
- WHERE COUNT(*) >= 3 da error: WHERE no puede usar funciones de agregado.
- Recuerda: WHERE es para filas, HAVING es para grupos.
Preguntas frecuentes
¿Cuál es la diferencia entre WHERE y HAVING?
WHERE filtra filas antes de agrupar; HAVING filtra grupos después del GROUP BY. WHERE es para filas, HAVING es para grupos.
¿Por qué WHERE COUNT(*) >= 3 da error?
Porque WHERE no puede usar funciones de agregado: ese conteo solo existe después de agrupar. Para eso está HAVING.