Skip to content
Maestro

Funciones de ventana en SQL

Al terminar, vas a poder escribir consultas con OVER, PARTITION BY, ROW_NUMBER, RANK, LAG y marcos de ventana, y explicar por qué una suma acumulada repite números o un LAG se salta un mes.

Avanzas a tu ritmo, con tu Maestro que te acompaña en todo el curso: le preguntas lo que quieras y también te pregunta a ti.

12 habilidades · 5 módulos

Pregúntale algo a tu Maestro ahora

¿Qué vas a poder hacer al terminar?

Cada recuadro es una habilidad. Abajo está la base, reconocer y explicar, y de ahí vas subiendo hasta construir lo tuyo y juzgar qué funciona y por qué.

  1. Sintetizar

    • Diseñar una consulta que rankea dentro de cada grupo y se queda con los primeros, con PARTITION BY, una función de ranking y QUALIFY

      Dónde lo enseño: Dónde vive una ventana · ¿Cómo saco el top 3 de cada grupo en SQL, con empates?

      Se apoya en:

      • Elegir entre ROW_NUMBER, RANK y DENSE_RANK según cómo tratan los empates
      • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes
      • Ubicar las ventanas y QUALIFY en el orden lógico de una consulta para predecir qué ve cada cláusula

      Tu Maestro te pide construir algo propio con ello y, cuando lo haces, lo guarda como evidencia.

  2. Analizar

    • Elegir entre ROW_NUMBER, RANK y DENSE_RANK según cómo tratan los empates

      Dónde lo enseño: Numerar y quedarte con uno · ¿Qué diferencia hay entre ROW_NUMBER, RANK y DENSE_RANK?

      Se apoya en:

      • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Detectar cuándo LAG se salta un periodo que falta, midiendo la distancia entre fechas

      Dónde lo enseño: Mirar a los lados · ¿Por qué LAG se salta un mes que falta y cómo lo encuentro?

      Se apoya en:

      • Comparar cada fila con la anterior o la siguiente de su grupo con LAG y LEAD

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Explicar por qué una suma acumulada repite números en empates y elegir entre ROWS y RANGE

      Dónde lo enseño: Acumular · ¿Por qué mi suma acumulada en SQL repite números?

      Se apoya en:

      • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

    • Ubicar las ventanas y QUALIFY en el orden lógico de una consulta para predecir qué ve cada cláusula

      Dónde lo enseño: Dónde vive una ventana · ¿En qué orden se ejecuta una consulta SQL con funciones de ventana?

      Se apoya en:

      • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes

      Tu Maestro te pide descomponer un problema con ello y, cuando lo haces, lo guarda como evidencia.

  3. Aplicar

    • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Dónde lo enseño: Sin perder filas · ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?

      Se apoya en:

      • Explicar cómo una función de ventana calcula un valor para cada fila sin juntar filas, a diferencia de GROUP BY

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Dónde lo enseño: Numerar y quedarte con uno · ¿Cómo numero las filas de cada grupo con ROW_NUMBER?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Filtrar por el resultado de una ventana con QUALIFY o con WITH, porque WHERE corre antes

      Dónde lo enseño: Numerar y quedarte con uno · ¿Cómo me quedo con el último registro de cada grupo en SQL?

      Se apoya en:

      • Numerar las filas de cada grupo en un orden elegido con ROW_NUMBER()

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Comparar cada fila con la anterior o la siguiente de su grupo con LAG y LEAD

      Dónde lo enseño: Mirar a los lados · ¿Cómo comparo cada fila con la del mes anterior en SQL con LAG?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Dónde lo enseño: Acumular · ¿Cómo hago una suma acumulada en SQL?

      Se apoya en:

      • Poner el total o el porcentaje de cada grupo junto a cada fila con OVER (PARTITION BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

    • Calcular un promedio móvil con ROWS BETWEEN n PRECEDING AND CURRENT ROW

      Dónde lo enseño: Acumular · ¿Cómo saco un promedio móvil de 3 meses en SQL?

      Se apoya en:

      • Escribir una suma acumulada por grupo con SUM() OVER (PARTITION BY ... ORDER BY ...)

      Tu Maestro te pide usarlo en un caso nuevo y, cuando lo haces, lo guarda como evidencia.

  4. Comprender

    • Explicar cómo una función de ventana calcula un valor para cada fila sin juntar filas, a diferencia de GROUP BY

      Dónde lo enseño: Sin perder filas · ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?

      Tu Maestro te pide explicarlo con tus palabras y, cuando lo haces, lo guarda como evidencia.

¿Para quién es este curso?

Para quien ya escribe SQL con SELECT, WHERE, GROUP BY y WITH, y quiere calcular sin perder filas: el total junto a cada fila, numerar, comparar con el mes anterior y sumas acumuladas. Empieza donde termina SQL para gente de datos. Practicas en DuckDB dentro de Maestro, aunque en el trabajo uses otro motor.

Pregúntale a tu Maestro

Tu Maestro es una IA que conoce este curso. Pregúntale sobre la primera página y te responde aquí mismo, gratis.

Ejemplo

Tú: ¿Por dónde empiezo?

Tu Maestro: Por lo que ya sabes. Cuéntame qué has hecho con datos y empiezo esta página desde ahí.

Pregunta sobre: Responde desde la página "¿Cómo pongo el total del grupo junto a cada fila sin perder filas?"

Solo este navegador guarda lo que preguntas aquí. ¿Cómo funciona?

Lo que vamos a ver

  1. Sin perder filas

    1. ¿Cómo pongo el total del grupo junto a cada fila sin perder filas?
    2. ¿Qué diferencia hay entre PARTITION BY y GROUP BY?
  2. Numerar y quedarte con uno

    1. ¿Cómo numero las filas de cada grupo con ROW_NUMBER?
    2. ¿Qué diferencia hay entre ROW_NUMBER, RANK y DENSE_RANK?
    3. ¿Cómo me quedo con el último registro de cada grupo en SQL?
  3. Mirar a los lados

    1. ¿Cómo comparo cada fila con la del mes anterior en SQL con LAG?
    2. ¿Por qué LAG se salta un mes que falta y cómo lo encuentro?
  4. Acumular

    1. ¿Cómo hago una suma acumulada en SQL?
    2. ¿Por qué mi suma acumulada en SQL repite números?
    3. ¿Cómo saco un promedio móvil de 3 meses en SQL?
  5. Dónde vive una ventana

    1. ¿En qué orden se ejecuta una consulta SQL con funciones de ventana?
    2. ¿Cómo saco el top 3 de cada grupo en SQL, con empates?

¿Cuánto tiempo toma?

Entre 1 y 1.5 horas

Es una guía: vas a tu ritmo, y el curso te espera donde lo dejaste.

Preguntas frecuentes

¿Qué es una función de ventana en SQL?
Una función de ventana calcula algo sobre un grupo de filas relacionadas sin reducirlas a una sola, como hace GROUP BY. Con OVER y PARTITION BY puedes poner el total junto a cada fila, numerar, mirar la fila anterior con LAG o acumular. Aprendes cada una con consultas que corren en la página.
¿Cuándo uso ROW_NUMBER y cuándo RANK?
Usa ROW_NUMBER cuando quieres una sola fila por grupo, por ejemplo el último pedido de cada cliente, aunque haya empates. Usa RANK cuando los empates deben compartir posición. El curso te muestra qué pasa con cada uno cuando dos filas empatan y cómo quedarte con una fila por grupo.
¿Qué necesito saber antes de empezar?
SELECT, WHERE, ORDER BY, funciones como SUM y COUNT, GROUP BY y consultas con WITH (CTE). Si alguno es nuevo, el curso SQL para gente de datos los enseña desde cero, y este empieza justo donde ese termina. Las consultas corren en DuckDB dentro de Maestro, así que no instalas nada.
¿Necesito un curso o puedo aprender esto por mi cuenta?
Puedes aprenderlo por tu cuenta, y mucha gente lo hace. Un curso te da el orden: qué practicar primero, datos ya preparados y ejercicios que te muestran dónde te equivocas antes de que pase en tu trabajo. Este curso es gratis y tu Maestro responde tus dudas mientras avanzas. Si prefieres seguir sin curso, el método te sirve igual.
¿Es gratis? ¿Necesito una cuenta?
Es gratis. Puedes leer todas las páginas sin cuenta. Con una cuenta gratis te inscribes con un toque, corres las consultas de cada página y le preguntas a tu Maestro.
¿Tengo que instalar algo?
No. Las consultas corren en DuckDB dentro de Maestro: escribes en la página y ves el resultado debajo.
Uso otro motor en el trabajo. ¿Me sirve?
Practicas en DuckDB. Cuando usamos QUALIFY, que no todos los motores aceptan, también ves la misma consulta con un CTE y WHERE, que no depende de QUALIFY. Si tienes dudas con tu motor, pregúntale a tu Maestro.
¿Los datos son reales?
No. Las ventas de las sucursales, los pedidos y los productos son datos inventados para el curso, pensados para que aparezcan los casos difíciles: empates, un mes que falta y dos pedidos el mismo día.

Lo que recibes

  • 5 módulos y 12 páginas, todo abierto para cuando quieras.
  • Abierto a todos: se lee completo, y tu Maestro, una IA, responde tus preguntas en cada página.

  • Con tu cuenta gratis: tu Maestro en todo el curso, siempre en la página donde vas, y los ejercicios corren sin instalar nada.

Palabras que vas a encontrar

En las lecciones, haces clic en una y ves qué significa, o se la preguntas a tu Maestro.

Quién te va a enseñar

Sergio Sánchez

Soy Sergio, chekos en el internet. Soy arquitecto de datos y llevo más de diez años trabajando con datos en el Área de la Bahía, casi siempre en organizaciones con una misión social: primero en investigación de políticas públicas, luego en educación y ahora en servicios para la primera infancia. Crecí en Tijuana. En 2018 empecé tacosdedatos para compartir lo que iba aprendiendo, y desde entonces ha sido blog, podcast, cursos, guías y comunidad. Hoy paso buena parte de mi tiempo construyendo con agentes de IA y escribiendo sobre cómo organizo mi trabajo alrededor de ellos. Yo comparto lo que he aprendido; tú tomas lo que te sirva y lo haces tuyo.

Nos vemos en el curso

Funciones de ventana en SQL