Estamos preparando el PDF de «Cuadernillo de problemas resueltos: nueve consultas SQL resueltas». Se descargará automáticamente en cuanto esté listo.
← Lumbre

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

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 · 14 minutos que valen la pena

Roadwise Consulting

Firmado y verificado · Biblioteca UNIV

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

14 min Ciencia de Datos e IA 17–99 años
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 SQL y Consultas de Datos · 3.er semestre 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.
      Más sobre esta lección
      Explora temas relacionados

      Conceptos

      Comentarios

      Inicia sesión para comentar.

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