SELECT p.categoria, c.pais, COUNT() AS total_productos FROM productos p JOIN categorias c ON p.id_categoria = c.id WHERE p.precio > 100 GROUP BY p.categoria, c.pais HAVING COUNT() > 5 ORDER BY total_productos DESC;
¡Buenísima consulta, Oscar! Vamos a desmenuzarla paso a paso para que el GROUP BY (y todo lo demás) te quede clarísimo:
¿Qué hace tu consulta?
Estás buscando agrupaciones de productos por categoría y país donde:
- El precio sea mayor a 100, y
- La cantidad de productos en ese grupo sea mayor a 5.
Desglose por partes
SELECT
p.categoria,
c.pais,
COUNT(*) AS total_productos
- Selecciona la categoría del producto, el país de la categoría, y cuenta cuántos productos hay en ese grupo.
FROM
productos p
JOIN
categorias c ON p.id_categoria = c.id
- Une las tablas productos y categorias para tener acceso a la columna pais.
WHERE
p.precio > 100
- Filtra los productos cuyo precio sea mayor a 100 antes de agrupar.
GROUP BY
p.categoria,
c.pais
- Aquí se agrupa por la combinación de categoría de producto y país. Cada grupo representa un conjunto único como “Electrónica–México” o “Hogar–España”.
HAVING
COUNT(*) > 5
- Aplica un filtro después de agrupar: solo se consideran los grupos que tienen más de 5 productos.
ORDER BY
total_productos DESC;
- Ordena los resultados del grupo que tiene más productos al que tiene menos.
¿Por qué GROUP BY importa aquí?
La cláusula GROUP BY es esencial porque:
- Estás contando productos, pero necesitas hacerlo por grupo.
- Agrupar por p.categoria y c.pais te permite obtener estadísticas por segmento.
Si quieres, te puedo ayudar a modificarla para incluir más métricas como precios promedio o categorías más vendidas. ¿Te gustaría hacerla más robusta o visualizarla en algún formato más claro?