Tutorial de SQL
Cómo usar ROW_NUMBER en SQL (funciones de ventana)
ROW_NUMBER() numera las filas 1, 2, 3… en el orden que indiques dentro de OVER, y es perfecta para rankings. Es una función de ventana: calcula mirando otras filas, pero sin juntarlas, así que cada fila sigue apareciendo con una columna nueva. Aquí verás la sintaxis, un ranking resuelto por promedio y cómo desempatar.
Funciones de ventana: ROW_NUMBER
Una función de ventana calcula algo mirando otras filas, pero sin juntarlas: cada fila sigue apareciendo y gana una columna nueva. Se reconocen porque llevan OVER (…).
ROW_NUMBER() numera las filas 1, 2, 3… en el orden que digas dentro de OVER. Es perfecta para rankings: «lugar 1, lugar 2…».
Cómo se escribe
SELECT ROW_NUMBER() OVER (ORDER BY columna DESC) AS lugar, … FROM tabla ORDER BY lugar
- ROW_NUMBER()
- número consecutivo para cada fila
- OVER (ORDER BY … DESC)
- en qué orden se numeran
- ORDER BY lugar
- el orden en que se muestra el resultado (es aparte)
Ejemplo resuelto
SELECT ROW_NUMBER() OVER (ORDER BY promedio DESC) AS lugar, nombre, promedio FROM alumnos ORDER BY lugar| Número de fila# | lugar | nombre | promedio |
|---|---|---|---|
| 1 | 1 | Regina Salinas | 9.8 |
| 2 | 2 | Valeria Núñez | 9.4 |
| 3 | 3 | Sebastián Lara | 9.1 |
| 4 | 4 | Mateo Guzmán | 8.9 |
| 5 | 5 | Camila Ortega | 8.6 |
| 6 | 6 | Ximena Paz | 8.1 |
| 7 | 7 | Emiliano Rojas | 7.8 |
| 8 | 8 | Diego Cárdenas | 7.2 |
| 9 | 9 | Santiago Flores | 6.9 |
| 10 | 10 | Renata Campos | 5.9 |
Ranking de alumnos por promedio: el mejor es el lugar 1.
En SQL Server: En SQL Server se escribe exactamente igual.
- El ORDER BY de dentro de OVER decide la numeración; el de afuera, cómo se ve la tabla. Son independientes.
- El WHERE se aplica antes de numerar: las facturas canceladas no ocupan lugar.
- Si dos filas empatan, ROW_NUMBER les da números distintos al azar: agrega una segunda columna en OVER para desempatar.
Preguntas frecuentes
¿Qué es una función de ventana en SQL?
Una función que calcula algo mirando otras filas sin agruparlas: cada fila sigue apareciendo y gana una columna nueva. Se reconocen porque llevan OVER (…).
¿Qué diferencia hay entre el ORDER BY de OVER y el de afuera?
El de dentro de OVER decide la numeración; el de afuera, el orden en que se muestra la tabla. Son independientes.
¿Qué hace ROW_NUMBER con los empates?
Les da números distintos sin un orden fijo. Agrega una segunda columna en el ORDER BY de OVER para desempatar.