Al terminar esta lección podrás
- Distinguir WHERE y HAVING.
- Filtrar resultados agregados.
- Justificar el momento de cada filtro.
Antes de empezar: GROUP BY. Explica en una frase qué recuerdas antes de continuar.
La idea, sin código
WHERE filtra filas antes de agrupar. HAVING filtra grupos después de calcular agregaciones. Elegir uno u otro depende de si la condición habla de una fila o de un resumen.
Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?
Sintaxis mínima
GROUP BY columna
HAVING función_agregada condiciónPrimer ejemplo guiado
| id | nombre | categoria | precio | stock |
|---|---|---|---|---|
| 1 | Teclado | Accesorios | 35 | 12 |
| 2 | Monitor | Pantallas | 189 | 5 |
| 3 | Ratón | Accesorios | 22 | 0 |
| 4 | Portátil | Equipos | 899 | 3 |
| 5 | Webcam | Accesorios | 59 | 8 |
Analiza la consulta antes de comprobar el resultado:
SELECT categoria, COUNT(*) AS productos
FROM productos
GROUP BY categoria
HAVING COUNT(*) >= 2;| categoria | productos |
|---|---|
| Accesorios | 3 |
Qué ocurre paso a paso
- GROUP BY crea los grupos.
- COUNT(*) calcula su tamaño.
- HAVING conserva Accesorios porque tiene al menos dos productos.
Error frecuente
Consulta o razonamiento problemático
WHERE COUNT(*) > 1 GROUP BY categoriaCOUNT(*) todavía no existe cuando WHERE filtra las filas.
Práctica guiada
Resuelve una sola dificultad cada vez
Muestra departamentos cuyo salario medio supere 30000.
Solución razonada
SELECT departamento, AVG(salario) AS media FROM empleados GROUP BY departamento HAVING AVG(salario) > 30000;La condición se aplica después de calcular la media de cada departamento.
Comprueba: identifica qué parte recupera, filtra, transforma, relaciona o modifica los datos.
Ahora sin guía
Transfiere lo aprendido
Cuenta pedidos por cliente e incluye solo clientes con dos o más pedidos.
Comparar con una solución posible
SELECT cliente_id, COUNT(*) AS pedidos
FROM pedidos
GROUP BY cliente_id
HAVING COUNT(*) >= 2;Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.
Resumen para llevarte
- WHERE filtra filas; HAVING filtra grupos.
- La condición agregada pertenece a HAVING.
- Explica qué representa una fila antes de elegir la cláusula.
Siguiente paso: Continúa con Consolidación: filtros, grupos y resúmenes.