Saltar al contenido
Bases de datos con SQL
Todos los cursos

Ejercicio: Agrupar y resumir

  • ⏱ 35 minutos
  • 📶 Nivel: principiante

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.

Paso 1
SELECT COUNT(*) AS sin_stock
FROM productos
WHERE stock = 0;

Resultado esperado

sin_stock
1
Paso 2
SELECT categoria, AVG(precio) AS promedio
FROM productos
GROUP BY categoria
ORDER BY promedio DESC;

Resultado esperado

categoriapromedio
Pantallas774.50
Periféricos105.17
Audio94.45
Accesorios15.00
Paso 3
SELECT categoria, SUM(stock) AS stock_total
FROM productos
GROUP BY categoria
HAVING SUM(stock) > 50
ORDER BY categoria;

Resultado esperado

categoriastock_total
Accesorios100
Periféricos67
Paso 4
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

productounidades
Ratón4
Paso 5
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

pedidototal
3929.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.