IOKELU
Nivel: Basico
💡 Prueba las consultas:
Puedes ejecutar cualquier consulta SQL en nuestra consola interactiva: Abrir consola SQL →

HAVING en SQL: filtra grupos después de agrupar

La cláusula HAVING permite filtrar resultados después de usar GROUP BY. WHERE filtra filas; HAVING filtra grupos. Es esencial para reportes y análisis avanzados.

1. ¿Qué es HAVING?

HAVING se usa para filtrar grupos creados con GROUP BY. Es similar a WHERE, pero WHERE filtra filas y HAVING filtra grupos completos.


SELECT ciudad, COUNT(*) 
FROM usuarios
GROUP BY ciudad
HAVING COUNT(*) > 2;
    

2. Diferencia entre WHERE y HAVING


-- Filtra filas
SELECT * FROM usuarios
WHERE edad > 18;

-- Filtra grupos
SELECT ciudad, COUNT(*) 
FROM usuarios
GROUP BY ciudad
HAVING COUNT(*) > 2;
    

3. Uso básico de HAVING


SELECT categoria, SUM(precio)
FROM productos
GROUP BY categoria
HAVING SUM(precio) > 100;
    

4. HAVING con funciones de agregación


SELECT ciudad, AVG(edad)
FROM usuarios
GROUP BY ciudad
HAVING AVG(edad) > 25;
    

5. HAVING con múltiples condiciones


SELECT categoria, COUNT(*), SUM(precio)
FROM productos
GROUP BY categoria
HAVING COUNT(*) > 1 AND SUM(precio) > 50;
    

6. Ejemplos prácticos


SELECT ciudad, COUNT(*) FROM usuarios GROUP BY ciudad HAVING COUNT(*) > 1;
SELECT categoria, SUM(precio) FROM productos GROUP BY categoria HAVING SUM(precio) > 100;
SELECT departamento, AVG(salario) FROM empleados GROUP BY departamento HAVING AVG(salario) > 2000;
    

7. Ejercicios para practicar

8. Mini‑proyecto: Filtrar ventas por categoría


CREATE TABLE ventas (
    id INT PRIMARY KEY,
    producto VARCHAR(50),
    categoria VARCHAR(50),
    precio DECIMAL(10,2)
);

INSERT INTO ventas VALUES (1, 'Camiseta', 'Ropa', 19.99);
INSERT INTO ventas VALUES (2, 'Pantalón', 'Ropa', 29.99);
INSERT INTO ventas VALUES (3, 'Auriculares', 'Electrónica', 49.99);

SELECT categoria,
       COUNT(*) AS total_productos,
       SUM(precio) AS suma_precios
FROM ventas
GROUP BY categoria
HAVING SUM(precio) > 40;
    

9. Errores comunes

10. Preguntas frecuentes

¿HAVING reemplaza a WHERE?

No, HAVING filtra grupos; WHERE filtra filas.

¿HAVING siempre requiere GROUP BY?

Sí, HAVING solo funciona después de agrupar.


Siguiente guía

SQL Básico – JOINS →