Sobes.tech
Junior

¿Cuál es la diferencia entre las construcciones WHERE y HAVING en SQL?

sobes.tech AI

Respuesta de la IA

WHERE filtra las filas antes de agrupar (GROUP BY), influyendo en qué filas participarán en las funciones de agregación. HAVING filtra los grupos después de agrupar, basándose en los resultados de las funciones de agregación.

Característica WHERE HAVING
Aplicación A filas individuales A grupos de filas
Momento de procesamiento Antes de GROUP BY Después de GROUP BY
Uso Con campos de la tabla, pero sin funciones de agregación Con resultados de funciones de agregación o campos de GROUP BY

Ejemplo de uso de WHERE:

SELECT nombre_producto, precio
FROM productos
WHERE category_id = 1; -- Filtra filas **antes** de agrupar (si se hubiera hecho)

Ejemplo de uso de HAVING:

SELECT category_id, COUNT(*) AS total_productos
FROM productos
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtra grupos **después** de contar el cantidad total de productos

Ejemplo de uso conjunto:

SELECT category_id, AVG(precio) AS precio_promedio
FROM productos
WHERE stock > 0 -- Filtra solo productos en stock **antes** de agrupar
GROUP BY category_id
HAVING AVG(precio) < 100; -- Filtra grupos con precio medio menor a 100 **después** de agrupar y calcular el promedio