¡Suscríbete a mi canal de Youtube!

24. GROUP BY y HAVING en MySQL

 

📊 Agrupar y filtrar datos en SQL con GROUP BY y HAVING

En este artículo aprenderás a utilizar las cláusulas GROUP BY y HAVING en SQL para agrupar datos y aplicar filtros sobre resultados agregados. Usaremos ejemplos prácticos con una tabla de ventas relacionada a una tabla de productos.


🧱 Creación de la tabla de ventas

Partimos del supuesto de que ya existe una tabla de productos con su respectiva clave primaria id. Vamos a crear la tabla ventas y relacionarla mediante una clave foránea:

USE tiendita;

CREATE TABLE ventas (
    id INT AUTO_INCREMENT PRIMARY KEY,
    vendedor VARCHAR(50),
    id_producto INT,
    cantidad INT,
    total DECIMAL(10, 2),
    FOREIGN KEY (id_producto) REFERENCES productos(id)
);

📌 Insertamos los siguientes datos de ejemplo:

INSERT INTO ventas (vendedor, id_producto, cantidad, total) VALUES
('Ana', 1, 2, 30000.00),   
('Luis', 2, 1, 7000.00),  
('Ana', 2, 3, 21000.00),   
('Pedro', 1, 1, 15000.00), 
('Luis', 1, 2, 28000.00),  
('Pedro', 2, 2, 14000.00), 
('Ana', 3, 4, 32000.00);  
---

🧮 Contar ventas por vendedor con GROUP BY y filtrar con HAVING

Ahora queremos saber cuántas ventas ha realizado cada vendedor, pero solo mostrar aquellos que tienen más de 2 ventas.

SELECT vendedor, COUNT(*) AS total_ventas
FROM ventas
GROUP BY vendedor
HAVING COUNT(*) > 2;

🔍 Aquí GROUP BY agrupa las filas por vendedor, y HAVING permite filtrar después del conteo. A diferencia de WHERE, HAVING se usa con funciones agregadas como COUNT, SUM, etc.

---

💰 Sumar el total vendido por cada vendedor (y filtrar con HAVING)

En este ejemplo vamos a calcular cuánto ha vendido cada vendedor en total y mostrar solo aquellos cuya suma supere los $30,000.

SELECT vendedor, SUM(total) AS total_vendido
FROM ventas
GROUP BY vendedor
HAVING total_vendido > 30000;

🧠 HAVING total_vendido > 30000 actúa sobre el resultado de la función SUM(total). Solo se muestran aquellos vendedores cuya suma de ventas supera esa cantidad.

---

🎯 Aplicar WHERE junto con GROUP BY y HAVING

En esta consulta, queremos ver las ventas solo de Ana, pero además, que el total vendido por ella sea mayor a $30,000.

SELECT vendedor, SUM(total) AS total_vendido
FROM ventas
WHERE vendedor LIKE "Ana"
GROUP BY vendedor
HAVING total_vendido > 30000;

📌 Aquí combinamos WHERE y HAVING:

  • WHERE: filtra las filas antes de agruparlas.
  • GROUP BY: agrupa solo las filas filtradas.
  • HAVING: filtra sobre los datos ya agrupados.
---

🧠 Conclusión

Las cláusulas GROUP BY y HAVING son fundamentales cuando necesitas trabajar con datos agregados como sumas, promedios o conteos. Recuerda:

  • ✔️ Usa WHERE para filtrar antes de agrupar.
  • ✔️ Usa HAVING para filtrar después de agrupar.
  • ✔️ Siempre que uses una función agregada (SUM, COUNT, etc.), HAVING es tu aliado.
En el siguiente video te muestro el uso de las cláusulas GROUP BY y HAVING para tus consultas en MySQL.
 ---

🗨️ ¿Quieres practicar más ejemplos con JOINs, subconsultas o filtros más complejos?

Déjame tu comentario aquí abajo y dime qué te gustaría ver en el próximo artículo. ¡Y no olvides seguir el blog para más contenido educativo de bases de datos y SQL! 📚🧠

Comentarios

Entradas populares

Donaciones

Seguidores del blog

Suscríbete al blog

Recibe mis nuevas publicaciones por email: