Módulo 5 · Consultas avanzadas

Funciones de ventana y ROW_NUMBER

Calcula posiciones y resúmenes sin perder el detalle de cada fila.

⏱ 28 minNivel: AvanzadoRequisito: ORDER BY, agregaciones y CASE

0 de 40 lecciones

Al terminar esta lección podrás

  • Utilizar ROW_NUMBER.
  • Distinguir ventana y agregación.
  • Interpretar PARTITION BY y ORDER BY.

Antes de empezar: ORDER BY, agregaciones y CASE. Explica en una frase qué recuerdas antes de continuar.

La idea, sin código

Una función de ventana calcula sobre filas relacionadas y conserva cada fila individual. OVER define la ventana; PARTITION BY crea grupos y ORDER BY establece el orden dentro de ellos.

Pregunta guía: ¿qué representa cada fila antes y después de aplicar este concepto?

Sintaxis mínima

Estructura
ROW_NUMBER() OVER (
  PARTITION BY columna
  ORDER BY columna DESC
)

Primer ejemplo guiado

Datos de ejemplo: tabla empleados
idnombredepartamentosalariofecha_alta
1LucíaVentas280002024-02-12
2DiegoDatos360002023-09-01
3SaraDatos390002022-04-18
4IvánVentas310002025-01-10
5ElenaSoporte295002024-11-20

Analiza la consulta antes de comprobar el resultado:

SQL
SELECT nombre, departamento, salario,
  ROW_NUMBER() OVER (
    PARTITION BY departamento
    ORDER BY salario DESC
  ) AS posicion
FROM empleados
ORDER BY departamento, posicion;
Resultado esperado
nombredepartamentosalarioposicion
SaraDatos390001
DiegoDatos360002
ElenaSoporte295001
IvánVentas310001
LucíaVentas280002

Qué ocurre paso a paso

  1. PARTITION BY reinicia la numeración por departamento.
  2. ORDER BY salario DESC coloca primero el salario mayor.
  3. Cada empleado conserva su propia fila.
Comprueba que lo entendiste

¿Qué diferencia principal existe frente a GROUP BY?

Error frecuente

Consulta o razonamiento problemático

Revisar
ROW_NUMBER(PARTITION BY departamento)

Las funciones de ventana necesitan OVER y los elementos de la ventana se escriben dentro de sus paréntesis.

Práctica guiada

Básica · apoyo graduado

Resuelve una sola dificultad cada vez

Numera los productos de mayor a menor precio dentro de cada categoría.

Ahora sin guía

Intermedia · práctica autónoma

Transfiere lo aprendido

Compara verbalmente el resultado de GROUP BY departamento con ROW_NUMBER particionado por departamento.

Comparar con una solución posible
SQL
GROUP BY produce una fila por departamento; ROW_NUMBER conserva una fila por empleado y añade su posición.

Puede existir otra solución válida. Comprueba que produce el resultado pedido y que puedes explicar cada cláusula.

Resumen para llevarte

  • Las ventanas conservan el detalle.
  • PARTITION BY define grupos sin colapsarlos.
  • ORDER BY dentro de OVER define el cálculo, no necesariamente el orden final.

Siguiente paso: Continúa con Añadir filas con INSERT.

Consulta rápida