Al terminar esta lección podrás
- Resolver consultas acumulativas.
- Corregir errores.
- Crear un plan de repaso por habilidades.
Antes de empezar: Proyecto biblioteca. Explica en una frase qué recuerdas antes de continuar.
La idea, sin código
La evaluación final no mide memoria aislada. Te pide interpretar, escribir, corregir y justificar consultas. Tras cada bloque debes identificar qué concepto conviene recuperar.
Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?
Sintaxis mínima
-- Interpretar
-- Escribir
-- Corregir
-- JustificarPrimer ejemplo guiado
| id | nombre | ciudad | |
|---|---|---|---|
| 1 | Ana | Madrid | ana@ejemplo.es |
| 2 | Luis | Valencia | luis@ejemplo.es |
| 3 | Marta | Madrid | NULL |
| 4 | Omar | Sevilla | omar@ejemplo.es |
| 5 | Nora | Bilbao | nora@ejemplo.es |
| id | cliente_id | fecha | total | estado |
|---|---|---|---|---|
| 101 | 1 | 2026-07-02 | 65 | enviado |
| 102 | 2 | 2026-07-04 | 189 | pendiente |
| 103 | 1 | 2026-07-09 | 44 | enviado |
| 104 | 3 | 2026-07-11 | 899 | cancelado |
| 105 | 5 | 2026-07-15 | 118 | enviado |
Analiza la consulta antes de comprobar el resultado:
SELECT c.ciudad, COUNT(p.id) AS pedidos, SUM(p.total) AS facturacion
FROM clientes AS c
JOIN pedidos AS p ON c.id = p.cliente_id
WHERE p.estado <> 'cancelado'
GROUP BY c.ciudad
ORDER BY facturacion DESC;| ciudad | pedidos | facturacion |
|---|---|---|
| Valencia | 1 | 189 |
| Bilbao | 1 | 118 |
| Madrid | 2 | 109 |
Qué ocurre paso a paso
- JOIN conecta entidades.
- WHERE elimina filas antes del resumen.
- GROUP BY cambia la unidad del resultado a ciudad.
Error frecuente
Consulta o razonamiento problemático
SELECT categoria, AVG(precio) FROM productos WHERE AVG(precio) > 100 GROUP BY categoria;La media por categoría debe filtrarse con HAVING después de GROUP BY.
Práctica guiada
Resuelve una sola dificultad cada vez
Muestra clientes cuya facturación no cancelada supere 100.
Solución razonada
SELECT c.nombre, SUM(p.total) AS facturacion FROM clientes AS c JOIN pedidos AS p ON c.id = p.cliente_id WHERE p.estado <> 'cancelado' GROUP BY c.id, c.nombre HAVING SUM(p.total) > 100;La consulta sigue una secuencia verificable: relación, filtro de filas, resumen y filtro de grupos.
Comprueba: identifica qué parte recupera, filtra, transforma, relaciona o modifica los datos.
Ahora sin guía
Transfiere lo aprendido
Reescribe la consulta para incluir clientes sin pedidos y explicar el tratamiento de NULL.
Comparar con una solución posible
SELECT c.nombre, COALESCE(SUM(p.total), 0) AS facturacion
FROM clientes AS c
LEFT JOIN pedidos AS p ON c.id = p.cliente_id AND p.estado <> 'cancelado'
GROUP BY c.id, c.nombre;Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.
Resumen para llevarte
- La evaluación debe reflejar lo practicado.
- Cada error señala una ruta de repaso.
- Explicar el razonamiento demuestra más que reconocer una opción.
Siguiente paso: Has terminado la ruta principal.