Ejercicio: Agrupar y resumir
Objetivo
Resumir datos de una tienda con funciones de agregación, agrupar con y sin JOIN y filtrar grupos con HAVING.
Cómo se trabaja
Trabaja con las tablas de esta lección (productos, clientes, pedidos y lineas_pedido). Escribe cada consulta y compárala con la solución.
Pasos
Marca cada paso a medida que lo completes. Tu avance se guarda en este navegador.
💡 Pista 1: el paso 3
El filtro depende de un total calculado, así que va en HAVING, no en WHERE.
💡 Pista 2: el paso 4
Une lineas_pedido con productos, agrupa por producto, ordena por la suma de mayor a menor y quédate con una fila con LIMIT 1.
✅ Ver una solución posible
Intenta resolverlo antes de mirar. Tu versión puede ser distinta y también correcta.
SELECT COUNT(*) AS sin_stock
FROM productos
WHERE stock = 0;
Resultado esperado
| sin_stock |
|---|
| 1 |
SELECT categoria, AVG(precio) AS promedio
FROM productos
GROUP BY categoria
ORDER BY promedio DESC;
Resultado esperado
| categoria | promedio |
|---|---|
| Pantallas | 774.50 |
| Periféricos | 105.17 |
| Audio | 94.45 |
| Accesorios | 15.00 |
SELECT categoria, SUM(stock) AS stock_total
FROM productos
GROUP BY categoria
HAVING SUM(stock) > 50
ORDER BY categoria;
Resultado esperado
| categoria | stock_total |
|---|---|
| Accesorios | 100 |
| Periféricos | 67 |
SELECT pr.nombre AS producto, SUM(l.cantidad) AS unidades
FROM lineas_pedido l
JOIN productos pr ON pr.id = l.producto_id
GROUP BY pr.id
ORDER BY unidades DESC, pr.nombre
LIMIT 1;
Resultado esperado
| producto | unidades |
|---|---|
| Ratón | 4 |
SELECT p.id AS pedido, SUM(l.cantidad * pr.precio) AS total
FROM pedidos p
JOIN lineas_pedido l ON l.pedido_id = p.id
JOIN productos pr ON pr.id = l.producto_id
GROUP BY p.id
ORDER BY total DESC
LIMIT 1;
Resultado esperado
| pedido | total |
|---|---|
| 3 | 929.00 |
💡 🏁 Reto extra (opcional)
Muestra, para cada cliente, el pedido más caro que ha hecho. Pista: calcula primero el total por pedido en una subconsulta o en una vista.