← Lumbre

Ciencia de Datos e IA Cuadernillo de problemas resueltos: nueve consultas SQL resueltas

← Volver a todos los contenidos
Portada de Cuadernillo de problemas resueltos: nueve consultas SQL resueltas

Cuadernillo de problemas resueltos: nueve consultas SQL resueltas

✦ Nueve problemas resueltos sobre una base de tres tablas: cada consulta con su logica, sus trampas y su codigo · Ciencia de Datos e IA · 10 minutos que valen la pena

Roadwise Consulting

Firmado y verificado · Fernando Castro

Objetivo: Escribir y depurar las consultas SQL analiticas esenciales: JOINs, anti-JOINs, agregaciones con HAVING, funciones de ventana y diagnostico de rendimiento con indices.

10 min 17–99 años
Autoevaluación
Más
Cuadernillo de problemas resueltos: nueve consultas SQL resueltas

Herramientas de la lección

◉ Entrar a La Matrix Sorpréndeme

Sobre este contenido

Ir a

Volver a Objetos Cursos Explorar Mi cuenta Salir del modo estudio

Cuadernillo de problemas resueltos: nueve consultas sobre una tiendita

SQL no se aprende leyendo: se aprende escribiendo consultas y peleando con resultados equivocados. Este cuadernillo resuelve sobre UNA base de datos fija —una tiendita de tres tablas— las nueve consultas que cubren el 90% del trabajo diario del analista: unir, buscar lo que falta, agrupar, filtrar grupos, comparar contra promedios, rankear, acumular, medir variacion mensual y acelerar con indices. Cada problema muestra la consulta, por que esta escrita asi y que devuelve.

Diagrama entity-relationship: clientes, ventas y productos unidos por claves ajenas.
Todo el cuadernillo gira sobre este esquema de tres tablas: aprendetelo de memoria para poder razonar las respuestas.

Bloque 1 · Unir y echar de menos

Problema 1. Lista que compro cada cliente: nombre del cliente, producto y fecha.

Solucion paso a paso

  1. Paso 1 · Plan

    Inventario: el nombre vive en clientes, el producto en productos, la fecha en ventas. Dos saltos = dos JOIN.

Paso 1 de 4

Problema 2. Encuentra los clientes que NUNCA compraron (inversion del JOIN).

Solucion paso a paso

  1. Paso 1 · Idea

    LEFT JOIN desde clientes: conserva TODOS los clientes y rellena NULL donde no hay venta.

Paso 1 de 4

Problema 3. ¿Cuantos clientes unicos tiene cada ciudad y cuanto gastan en total?

Solucion paso a paso

  1. Paso 1 · Plan

    Agrupar por ciudad y contar: dos tablas implicadas (clientes y ventas) mas productos para el importe: tres JOINs y un GROUP BY.

Paso 1 de 3

Bloque 2 · Filtrar grupos y comparar contra agregados

Problema 4. Categorias de producto que VENDAN MAS de 100 unidades acumuladas.

Solucion paso a paso

  1. Paso 1 · Concepto

    El filtro actua SOBRE EL GRUPO: eso es HAVING, no WHERE. WHERE filtra filas antes de agrupar; HAVING filtra grupos despues.

Paso 1 de 3

Problema 5. Productos caros: los que cuestan MAS que el precio promedio de su propia categoria.

Solucion paso a paso

  1. Paso 1 · Plan

    Necesitas el promedio POR CATEGORIA y compararlo con cada fila: o ventana, o subconsulta correlacionada. Version ventana, mas limpia.

Paso 1 de 3

Problema 6. Top 3 productos mas vendidos de cada categoria.

Solucion paso a paso

  1. Paso 1 · Capa 1

    Primero agregacion: unidades por producto con su categoria.
    WITH ventas_prod AS (
      SELECT v.producto_id, p.nombre, p.categoria,
             SUM(v.cantidad) AS unidades
      FROM ventas v
      JOIN productos p ON p.id = v.producto_id
      GROUP BY v.producto_id, p.nombre, p.categoria
    )

Paso 1 de 3

Bloque 3 · Ventanas temporales y rendimiento

Problema 7. Ventas acumuladas mes a mes (curva de crecimiento).

Solucion paso a paso

  1. Paso 1 · Agregado mensual

    Capa 1: total por mes con date_trunc.
    WITH mensual AS (
      SELECT date_trunc('month', fecha) AS mes,
             SUM(v.cantidad * p.precio) AS ventas
      FROM ventas v
      JOIN productos p ON p.id = v.producto_id
      GROUP BY 1
    )

Paso 1 de 3

Problema 8. Variacion porcentual de cada mes contra el anterior.

Solucion paso a paso

  1. Paso 1 · Idea

    LAG(ventas) OVER (ORDER BY mes) trae el valor de la fila anterior a la columna actual: comparar entre filas sin comparar contra si misma.

Paso 1 de 3

Problema 9. La consulta del problema 3 vuela en tu laptop pero en produccion tarda 40 segundos. Diagnostica y acelera.

Solucion paso a paso

  1. Paso 1 · Diagnostico

    Primero medir, luego tocar: EXPLAIN ANALYZE muestra el plan real y donde arde.
    EXPLAIN ANALYZE
    SELECT c.ciudad, SUM(v.cantidad * p.precio)
    FROM clientes c
    JOIN ventas v ON v.cliente_id = c.id
    JOIN productos p ON p.id = v.producto_id
    GROUP BY c.ciudad;

Paso 1 de 4

Arbol de decisiones SQL

Que construccion SQL uso

  • Consultar datos
    • Faltan columnas de otra tabla
      • JOIN: cruce de fronteras
      • LEFT JOIN: conserva la izquierda
    • Faltan filas
      • LEFT JOIN + IS NULL
      • NOT EXISTS a prueba de NULL
    • Una cifra por grupo
      • GROUP BY + agregados
      • Filtrar el grupo: HAVING
    • Comparar fila contra grupo
      • Ventana OVER (PARTITION BY)
      • O CTE y filtro exterior
    • Tiempo y ranking
      • SUM OVER: acumulados
      • LAG/LEAD: variaciones
      • RANK OVER: top N por grupo

Autoexamen cronometrado (20 minutos)

Sobre el mismo esquema de la tiendita. Responde sin volver a leer los problemas.

¿Cual clausula filtra GRUPOS ya formados?

Para hallar clientes sin ventas sirve WHERE v.id = NULL.

Tienes ventas por cliente duplicadas tras un JOIN y el total sale inflado. ¿Cual es la causa mas probable?

La funcion trae el valor de la fila anterior dentro de la ventana ordenada.

Empareja necesidad y construccion.

      VENTAS tiene 5000 filas (cada venta apunta a EXACTAMENTE 1 producto valido) y PRODUCTOS 200 filas. ¿Cuantas filas devuelve ventas JOIN productos?

      Video de repaso

      SQL analitico: video complementario
      Repaso visual de JOINs, agregaciones y ventanas.

      El problema 3 con COUNT sin DISTINCT es el bug de dashboard mas frecuente del mundo laboral. Inventa un JOIN 1:N tuyo (pedidos-lineas, sesiones-eventos) y escribe la version inflada y la correcta: nota que ambas "funcionan" y solo una miente.

      Tu texto se guarda sólo en este dispositivo.

      Las respuestas y tu progreso se guardan sólo en este dispositivo. Contenido firmado por su autoría mediante Lumbre.

      Autoevaluación

      Comprueba lo que aprendiste

      3 preguntas · ves cada respuesta al momento · el resultado queda guardado en tu historial

      Iniciar autoevaluación
      Más sobre esta lección

      Rutas vivas

      ¿Y ahora qué? Elige el camino por lo que necesitas

      No es un listado al azar: cada camino responde una pregunta distinta y te dice por qué.

      Otra forma de comprenderlo

      ✦ Explorar el universo completo
      Explora temas relacionados

      Conceptos

      Comentarios

      Inicia sesión para comentar.

      Todavía no hay comentarios. Sé la primera persona en opinar.