En SQL server ROW NUMBER es una de las funciones de clasificación. Esta función asigna el número de rango secuencial a cada registro único presente en una partición.
Si la función de SQL Server ROW_NUMBER encuentra dos valores iguales en la misma partición, asignará los diferentes números de clasificación a ambos valores. Aquí los números de rango dependerán del orden en que se muestren.
Sintaxis en SQL Server ROW NUMBER
ROW_NUMBER() OVER (
[PARTITION BY columna1,columna2 ... ]
ORDER BY column2 ASC | DESC, ...
)
Donde , OVER – Organice las filas en el orden deseado.
ORDER BY – Ordenar ascendente o descendente.
PARTITION BY : la función SQL Server ROW_NUMBER en SQL tiene una cláusula opcional denominada PARTITION BY. Es una cláusula que separa el conjunto de salida en secciones o grupos de filas. El número de fila en el servidor SQL luego se aplica a cada una de las particiones, lo que le da a cada una su propio número de rango.
Ejemplo en SQL server ROW_NUMBER
La siguiente declaración busca el nombre, el apellido y la cantidad de todos los Clientes. Además, utiliza la función SQL Server ROW NUMBER() para agregar números enteros secuenciales a cada fila.
SELECT ROW_NUMBER() OVER (ORDER BY cantidad) Numero_Fila
,Nombre, Sexo, Pais, cantidad
FROM Cliente
Repasemos algunas de sus funciones ROW NUMBER:
- La función es responsable de asignar un identificador o número único a cada fila en la que se implementa (ya sea cada fila en la partición o cada fila devuelta por la consulta), comenzando con 1 en la cláusula order by.
- El número de fila en el servidor SQL se conoce como una función de clasificación de SQL que otorga a cada nuevo registro en una partición un número de clasificación secuencial.
Otro ejemplo de la función
En el siguiente ejemplo, tenemos 2 empleados con salario iguales y, aunque hemos generado números de fila sobre la columna de salario, produce números de fila diferentes en los 2 empleados con salarios iguales.
select row_number() over (order by salario desc) Numero_fila,
nombre,salario from Empleado
resultado:
nombre salario Numero_fila
José 7000 1
María 2000 2
Juan 4000 3
Sara 3000 4
Ricardo 3000 5
Gabriel 1000 6
Puede ver en este ejemplo que hemos clasificado a los empleados en función de sus salarios y cada uno de ellos tiene un rango único incluso si sus salarios son los mismos, por ejemplo, Sara y Ricardo tienen el mismo salario de 3000 pero obtuvieron el rango único 4 y 5. Vale la pena saber que, en caso de empate, los rangos se asignan de forma aleatoria.
SQL ROW_NUMBER con la Función PARTITION BY?
PARTITION BY es responsable de dividir el conjunto de salida en particiones (que en términos sencillos significa un grupo de filas). La frase PARTITION BY es opcional. El método ROW NUMBER() tratará todo el conjunto de resultados como una sola partición si lo omite. Veamos un ejemplo para entender mejor el concepto. La función SQL Server ROW_NUMBER en SQL se usa en la siguiente oración para asignar un número entero a cada uno de los empleados en la tabla en un orden determinado. Haremos uso de la cláusula de partición para dividir a los empleados en grupos en función de su nacionalidad.
SELECT Emp_nombre, Emp_pais,
ROW_NUMBER() OVER (PARTITION BY Emp_pais
ORDER BY Emp_nombre) Número_fila
FROM empleados
ORDER BY Emp_pais; Emp_pais;
Salida :
Emp_nombre | Emp_país | Número_fila |
---|---|---|
Delling | Inglaterra | 1 |
Kevin | Inglaterra | 2 |
Francisco | Francia | 1 |
Muskán | India | 1 |
Sumán | India | 2 |
En esta consulta cada empleado se ha dividido en función de su país. Cada vez que se cambia el nombre del país, se reinicializa el número entero asignado secuencialmente, o NÚMERO DE FILA.
Conclusión
- La función NÚMERO DE FILA de SQL Server encuentra dos valores similares en la misma partición, asigna a cada uno de ellos un número de rango separado.
- La función row_number() siempre genera una clasificación única incluso con registros duplicados , es decir, si la cláusula ORDER BY no puede distinguir entre dos filas, aún les otorgará clasificaciones diferentes, aunque qué registro vendrá antes o después se decide aleatoriamente.
- Esta función pertenece a las funciones de clasificación como las siguientes funciones : RANK(), ROW_NUMBER(), DENSE_RANK(), NTILE()