La función RANK en SQL Server es un tipo de función de clasificación. Esta función asignar el número a cada fila dentro de la partición de una salida . Asigna el rango a cada fila como uno más el rango de la fila anterior. Cuando la función RANGO encuentra dos valores que son idénticos dentro de la misma partición, les asigna el mismo número de rango. Además, el siguiente número en el ranking será el ranking anterior más los números duplicados. Por lo tanto, esta función no siempre asigna la clasificación de filas en orden consecutivo.
La función RANK también es una subparte de las funciones de ventana. Se deben recordar los siguientes puntos al utilizar esta función :
lobo contra zorro
- Siempre funciona con la cláusula OVER().
- Asigna un rango a cada fila según la cláusula ORDER BY.
- Asigna un rango a cada fila en orden consecutivo.
- Siempre asigna un rango a las filas, comenzando con una para cada nueva partición.
NOTA: Rank asigna valores temporales para las filas dentro de la partición cuando se ejecuta la consulta.
SQL Server proporciona las siguientes funciones de clasificación :
- RANGO()
- NUMERO DE FILA()
- RANGO_DENSO()
- NTILE()
Aprendamos cada función de rango en detalle. Primero, crearemos una tabla para demostrar todas estas funciones. Las siguientes declaraciones crean una tabla llamada ranking_demo con tres columnas:
CREATE TABLE rank_demo ( first_name VARCHAR(60), last_name VARCHAR(40), city VARCHAR(30) );
A continuación, insertaremos algunas filas en esta tabla como se muestra a continuación:
INSERT INTO rank_demo (first_name, last_name, city) VALUES ('Luisa', 'Evans', 'Texas'), ('Paul', 'Ward', 'Alaska'), ('Peter', 'Bennett', 'California'), ('Carlos', 'Patterson', 'New York'), ('Rose', 'Huges', 'Florida'), ('Marielia', 'Simmons', 'Texas'), ('Antonio', 'Butler', 'New York'), ('Diego', 'Cox', 'California');
Podemos verificar la tabla usando la declaración SELECT. Muestra el siguiente resultado:
Función RANGO()
Esta función se utiliza para determinar la clasificación de cada fila en el conjunto de resultados. La siguiente sintaxis ilustra el uso de una función RANK en SQL Server:
SELECT column_name RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
En esta sintaxis,
- El cláusula SOBRE establece la partición y el orden de un resultado antes de que se aplique la función de ventana asociada.
- El Cláusula PARTICIÓN POR divide la salida producida por la cláusula FROM en la partición. Luego, la función se aplica a cada partición y se reinicia cuando el borde de división cruza las particiones. Si no hemos definido esta cláusula, la función tratará todas las filas como una única partición.
- El ORDENAR POR es una cláusula obligatoria que determina el orden de las filas de forma descendente o ascendente en función de uno o más nombres de columnas antes de aplicar la función.
Ejemplo
Veamos cómo funciona la función RANK() en SQL Server. La siguiente declaración utilizará la función de clasificación para asignar la numeración a cada fila:
10 de 40
SELECT first_name, last_name, city, RANK () OVER (ORDER BY city) AS Rank_No FROM rank_demo;
Como no hemos utilizado el Cláusula PARTICIÓN POR , la función trató todo el resultado como una única partición. Al ejecutar la declaración se mostrará el siguiente resultado:
En este resultado, podemos ver que algunas de las filas obtienen el mismo rango porque tienen el mismo valor en el columna de la ciudad . Y el siguiente número en el ranking será su rango anterior más una cantidad de números duplicados.
La siguiente declaración es otro ejemplo donde vamos a utilizar una cláusula de partición por que dividirá las filas en función del ciudad columna y asignar una clasificación a cada fila dentro de una partición. El orden de salida se basa en el nombre de pila :
SELECT first_name, last_name, city, RANK () OVER (PARTITION BY city ORDER BY first_name) AS Rank_No FROM rank_demo;
Mostrará el siguiente resultado:
Función ROW_NUMBER()
Esta función se utiliza para devolver el número secuencial único para cada fila dentro de su partición. La numeración de filas comienza en uno y aumenta en uno hasta alcanzar el número total de filas de la partición. Devolverá los diferentes rangos para la fila que tenga valores similares que la hagan diferente de la función RANK().
La siguiente sintaxis ilustra el uso de una función ROW_NUMBER() en SQL Server:
SELECT column_name ROW_NUMBER() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Ejemplo
Ejecute la siguiente consulta para asignar un número de secuencia para cada fila:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Asignará la clasificación de la tabla según su ciudad . Aquí podemos ver que asigna diferentes rangos para la fila que tiene los mismos valores de ciudad.
conjunto de hash java
Si cambiamos el orden de clasificación de ascendiendo a descendiendo con la cláusula ORDER BY, esta función también cambiará el RANK en consecuencia. Vea la siguiente declaración:
SELECT first_name, last_name, city, ROW_NUMBER() OVER(ORDER BY city DESC) AS my_rank FROM rank_demo;
Aquí está el resultado:
Función DENSE_RANK()
Esta función asigna un rango único para cada fila dentro de una partición según el valor de columna especificado sin espacios. Siempre especifica la clasificación en orden consecutivo. Si conseguimos un valor duplicado , esta función le asignará el mismo rango, siendo el siguiente rango el siguiente número secuencial. Esta característica diferencia la función DENSE_RANK() de la función RANK().
cadena comparable
La siguiente sintaxis ilustra el uso de una función DENSE_RANK() en SQL Server:
SELECT column_name DENSE_RANK() OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'rank_name' FROM table_name;
Ejemplo
La siguiente consulta utiliza la función DENSE_RANK() para asignar un número de clasificación para cada fila:
SELECT first_name, last_name, city, DENSE_RANK() OVER(ORDER BY city) AS my_rank FROM rank_demo;
Devolverá el siguiente resultado donde podemos ver que los valores duplicados tienen el mismo rango y el siguiente rango será el siguiente número secuencial.
Es otro ejemplo de la función DENSE_RANK() utilizando la cláusula PARTITION BY. Esta cláusula dividirá las filas según la columna de ciudad, y el orden de un conjunto de resultados se basa en el nombre:
SELECT first_name, last_name, city, DENSE_RANK() OVER(PARTITION BY city ORDER BY first_name) AS my_rank FROM rank_demo;
Obtendremos el siguiente resultado porque no hay dos nombres iguales. En este caso, la salida es similar a la función RANK().
Actualicemos el nombre con la siguiente consulta:
Update rank_demo set first_name = 'Diego' WHERE city = 'California'
Ahora, ejecute la misma consulta nuevamente. Veremos que esta tabla recibió el mismo nombre en ciudad de california . Por lo tanto, el rango también es el mismo para ambos nombres.
Función NTILE(N)
Esta función se utiliza para distribuir filas de una partición ordenada en un número predefinido (N) de grupos aproximadamente iguales. Cada grupo de filas obtiene su clasificación según la condición definida y comienza a numerarse desde un grupo. Se asigna un número de cubo para cada fila de un grupo que representa el grupo al que pertenece.
La siguiente sintaxis ilustra el uso de una función NTILE() en SQL Server:
SELECT column_name NTILE(N) OVER ( PARTITION BY expression ORDER BY expression [ASC|DESC]) AS 'my_rank' FROM table_name;
Ejemplo
en.siguiente java
La siguiente consulta utiliza la función NTILE() para asignar un número de clasificación para cada fila:
SELECT first_name, last_name, city, NTILE(3) OVER(ORDER BY city) AS my_rank FROM rank_demo;
La tabla especificada tiene ocho registros . Por lo tanto, la NTILE(3) dice que el conjunto de resultados debe tener un grupo de tres registros . Al ejecutar la declaración se mostrará el siguiente resultado:
Este artículo explicará todas las funciones RANK utilizadas en SQL Server con varios ejemplos. También muestra las principales diferencias entre estas funciones. Estas funciones son muy útiles para que los desarrolladores exploren y administren bien sus datos.