SQL desde cero · lección 4 de 6

WHERE o HAVING: filtrar antes o después de agrupar

La pregunta que cae en casi todos los exámenes: cuándo se usa WHERE, cuándo HAVING y qué pasa si usas los dos.

WHERE filtra filas, antes de agrupar. HAVING filtra grupos, después de agrupar. Por eso WHERE COUNT(*) > 2 da error: cuando se aplica el WHERE todavía no hay nada contado.

El orden en que se escribe una consulta completa es siempre el mismo: SELECT … FROM … WHERE … GROUP BY … HAVING … ORDER BY … LIMIT ….

Se pueden usar los dos a la vez: primero WHERE decide qué filas entran, luego se agrupa y luego HAVING decide qué grupos salen.

La tabla

robos

idsospechoso_idciudadbotin
12Puerto Sal1200
22Puerto Sal800
34San Ciro300
45Puerto Sal5000
58Puerto Sal450
68Bahía Lumen950
78San Ciro150
81Bahía Lumen2200
9NULLBahía Lumen700

Puedes escribir aquí mismo: cada ejercicio se ejecuta con DuckDB en tu navegador, sin instalar nada. Con el teclado: Ctrl + Enter.

1. Ciudades con muchos robos

La ciudad y sus robos, sólo donde hubo más de 2.

2. Antes de agrupar

Por ciudad, cuántos robos de 500 o más de botín hubo.

3. Los que suman mucho

El sospechoso_id y el botín total de quienes suman 1500 o más.

4. Los dos a la vez

Fuera de San Ciro, el sospechoso_id de quienes tienen 2 robos o más y cuántos son.