Published on

June 25, 2019

Comprendiendo las funciones de RANK de SQL Server

Cuando trabajamos con datos en SQL Server, a menudo necesitamos realizar cálculos y clasificar los datos en función de ciertos criterios. SQL Server proporciona varias funciones de rango que nos permiten asignar rangos a filas individuales en un conjunto de resultados. Estas funciones, conocidas como funciones de RANK de SQL o funciones de ventana, proporcionan una forma de agregar datos y asignar rangos a cada fila participante.

Existen cuatro funciones principales de RANK de SQL:

  • ROW_NUMBER()
  • RANK()
  • DENSE_RANK()
  • NTILE()

Estas funciones se pueden utilizar con la cláusula OVER() para definir un conjunto de filas en el conjunto de resultados. Además, la cláusula PARTITION BY se puede utilizar para definir un subconjunto de datos dentro de una partición. La cláusula ORDER BY también se puede utilizar para ordenar los resultados en orden ascendente o descendente.

Echemos un vistazo a un ejemplo para comprender mejor cómo funcionan estas funciones de RANK de SQL. Consideremos una tabla llamada ExamResult que contiene los resultados de exámenes de tres estudiantes en diferentes materias:

CREATE TABLE ExamResult (
  StudentName VARCHAR(70),
  Subject VARCHAR(20),
  Marks INT
);

INSERT INTO ExamResult VALUES ('Lily', 'Maths', 65);
INSERT INTO ExamResult VALUES ('Lily', 'Science', 80);
INSERT INTO ExamResult VALUES ('Lily', 'English', 70);
INSERT INTO ExamResult VALUES ('Isabella', 'Maths', 50);
INSERT INTO ExamResult VALUES ('Isabella', 'Science', 70);
INSERT INTO ExamResult VALUES ('Isabella', 'English', 90);
INSERT INTO ExamResult VALUES ('Olivia', 'Maths', 55);
INSERT INTO ExamResult VALUES ('Olivia', 'Science', 60);
INSERT INTO ExamResult VALUES ('Olivia', 'English', 89);

Ahora, usemos cada función de RANK de SQL en algunos ejemplos:

Función de RANK de SQL ROW_NUMBER()

La función ROW_NUMBER() asigna un número secuencial único a cada fila en los datos especificados. Comienza con 1 para la primera fila e incrementa el valor en uno para cada fila subsiguiente. Incluso las filas con valores similares tendrán rangos diferentes.

SELECT StudentName, Subject, Marks, ROW_NUMBER() OVER (ORDER BY Marks) AS RowNumber
FROM ExamResult;

Esta consulta asignará un rango a cada estudiante en función de sus calificaciones, siendo la calificación más baja la que recibe un rango de 1.

Función de RANK de SQL RANK()

La función RANK() asigna un rango a cada fila en el conjunto de resultados. Clasifica el resultado de los estudiantes en función de sus calificaciones en las materias. Las filas con valores similares tendrán el mismo rango, pero se omitirá el siguiente rango.

SELECT StudentName, Subject, Marks, RANK() OVER (PARTITION BY StudentName ORDER BY Marks DESC) AS Rank
FROM ExamResult
ORDER BY StudentName, Rank;

En este ejemplo, las calificaciones más altas en la materia de inglés recibirán un rango de 1, mientras que las calificaciones más bajas en la materia de matemáticas recibirán un rango de 3 para la estudiante Isabella.

Función de RANK de SQL DENSE_RANK()

La función DENSE_RANK() asigna un número de rango único dentro de una partición en función del valor de columna especificado. Es similar a la función RANK(), pero asigna rangos diferentes a las filas con valores duplicados.

SELECT StudentName, Subject, Marks, DENSE_RANK() OVER (ORDER BY Marks DESC) AS Rank
FROM ExamResult
ORDER BY Rank;

En esta consulta, podemos ver que tanto Lily como Isabella reciben el mismo rango por sus calificaciones de 70.

Función de RANK de SQL NTILE(N)

La función NTILE(N) distribuye el número de filas en el número especificado de grupos. A cada grupo de filas se le asigna un rango en función de la condición especificada. El valor de N determina el número de grupos.

SELECT *, NTILE(2) OVER (ORDER BY Marks DESC) AS Rank
FROM ExamResult
ORDER BY Rank;

En este ejemplo, dividimos las filas en dos grupos en función de sus calificaciones. El primer grupo contiene cinco filas, mientras que el segundo grupo contiene cuatro filas.

Estas funciones de RANK de SQL se pueden utilizar en diversos escenarios para analizar y manipular datos. Por ejemplo, se pueden utilizar para obtener filas específicas de los datos o para obtener un número específico de registros utilizando el comando OFFSET FETCH.

Al comprender y utilizar estas funciones de RANK de SQL, los desarrolladores de SQL pueden gestionar y analizar eficazmente sus datos. Si tienes algún comentario o pregunta, no dudes en dejarlos a continuación.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.