logo

Función Row_Number de SQL Server con PARTICIÓN POR

La función de número de fila es una de las funciones de ventana que se utilizan para asignar el número de fila a las filas en cada una de las particiones en el orden en que se ordenaron en la partición usando el DIVIDIR cláusula, PARTICIÓN sólo la ORDEN La cláusula se puede utilizar dentro de la cláusula OVER, en tal caso toda la tabla se considerará como una partición. Pero la cláusula ORDER BY es obligatoria para utilizar el NUMERO DE FILA() función ya que organiza las filas en las particiones en ese orden lógico y luego la función ROW_NUMBER() puede asignar el número de fila. En cada partición, el número de fila comienza desde 1.

Sintaxis:



NUMERO DE FILA ( )

SOBRE ( [ PARTICIÓN POR col_1,col_2… ] ORDEN POR col_3,col_4.. ASC o DESC) AS nombre_columna

Componentes de la función ROW_NUMBER()



  • PARTICIÓN POR: Esta es la subcláusula principal que divide las filas en ventanas y para cada fila, los valores de funciones de ventana Se calculará el valor aplicado.
  • ORDENAR POR: Esto se utiliza para ordenar las filas en la partición, por defecto es el orden ascendente. Sin la cláusula ORDER BY, la función ROW_NUMBER() no funciona.
  • Tipo de devolución: El tipo de retorno de la función ROW_NUMBER() es BIGINT.

Uso de la función ROW_NUMBER()

Paso 1: Cree la base de datos Geeksforgeeks utilizando la siguiente consulta SQL:

Consulta

CREATE DATABASE Geeksforgeeks>

Utilice la base de datos GFG.



Consulta

USE techcodeview.com>

Paso 3: Crea una tabla con los alumnos de las diferentes secciones con sus notas totales sobre 500.

Consulta

CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT  );>

Etapa 4: Inserte las filas en la tabla:

Consulta

INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368),  (5, 'Geek15','C',295),  (6, 'Geek16','C',495);>

Paso 5: revisa la tabla

SELECT * FROM studentsSectionWise>

Producción:

estudiantesSectionWise-Table

estudiantesSectionWise tabla

verificación nula de java

Usando la cláusula ORDER_BY con la función ROW_NUMBER()

El uso simple de la cláusula ORDER BY con ascendente o descendente considera toda la tabla como una sola partición.

Comprobemos el número de rango de los estudiantes que utilizan la función ROW_NUMBER() con la cláusula ORDER BY que incluye todas las secciones:

SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Explicación: En la consulta hemos utilizado la cláusula ORDER BY con las marcas de los estudiantes que están ordenadas en orden DESC.

Producción:

producción

Producción

Explicación: En el resultado podemos ver que toda la tabla se considera como una única partición y el número de rango está en orden creciente con las marcas de los estudiantes en orden descendente.

Usando PARTITION_BY con la función ROW_NUMBER()

El uso simple de la cláusula PARTITION BY divide y la tabla en diferentes particiones según el nombre de la columna y luego la cláusula ORDER BY con ascendente o descendente considera toda la tabla como una sola partición. Y luego ROW_NUMBER() funciona con cada número único a partir de 1 en cada partición.

Comprobemos la sección de clasificación utilizando la función ROW_NUMBER() con las cláusulas PARTITION BY y ORDER BY.

SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>

Explicación: En la consulta hemos utilizado Cláusula PARTICIÓN POR para dividir la tabla en la sección Nombre y cláusula ORDER BY con las Marcas de los estudiantes que están ordenadas en DESC.

Producción:

producción

Producción

Explicación: En el resultado podemos ver que tenemos particiones divididas por el nombre de la sección y luego, en cada partición, los estudiantes se ordenan según las calificaciones de los estudiantes en el orden DESC, la función ROW_NUMBER() asigna el número de fila a partir de cada partición y se incrementa. .

Comprender ROW_NUMBER() sin PARTICIÓN POR

La función ROW_NUMBER() de SQL Server es una herramienta flexible que le permite proporcionar a cada fila de un conjunto de resultados un número de fila único. Es igualmente eficaz cuando se utiliza sin la cláusula PARTITION BY, aunque se utiliza frecuentemente junto con ella para agrupar y clasificar dentro de particiones. En este artículo se analizarán las posibilidades y usos de ROW_NUMBER() sin la cláusula PARTITION BY.

Sintaxis:

SELECCIONAR

ROW_NUMBER() SOBRE ( ORDENAR POR SuPedidoPorColumna) COMO número de fila,

Otras columnas

DE

SuNombreDeTabla;

Comprobemos la sección de clasificación utilizando la función ROW_NUMBER() sin las cláusulas PARTITION BY y ORDER BY.

SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>

Producción:

producción

Producción

Usando ROW_NUMBER() para obtener el subconjunto de filas

La función ROW_NUMBER() se puede utilizar para obtener el subconjunto de filas de la tabla utilizando el CTE, lo que puede resultar útil en el caso de la paginación de los datos.

Revisemos los 2 primeros clasificados de cada clase usando el CTE (expresión de tabla común) con la función ROW_NUMBER():

WITH topTwoRankers AS  (   SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber  FROM studentsSectionWise  )  SELECT *  FROM topTwoRankers  WHERE rankNumber <=2;>

Explicación: Aquí, en la consulta, hemos utilizado la expresión CTE para obtener la tabla temporal de la consulta utilizada anteriormente y hemos utilizado la consulta SELCT externa para obtener los estudiantes cuyo número de rango es menor o igual a 2.

Producción:

producción

Producción

Explicación: En el resultado podemos ver que tenemos los 2 primeros clasificados de cada sección, que son el subconjunto de la tabla obtenida de la consulta que se muestra en el ejemplo anterior.

Ventajas deROW_NUMBER()>Con PARTICIÓN POR

  1. Permite una clasificación avanzada de particiones.
  2. Habilita la numeración de filas única dentro de grupos específicos.
  3. Permite una mayor flexibilidad en circunstancias que implican un análisis extenso.

Ventajas deROW_NUMBER()>Sin PARTICIÓN POR

  1. Directo y simple.
  2. simplifica la clasificación de elementos según una columna en particular.
  3. Puede ofrecer un mejor rendimiento, especialmente para conjuntos de resultados más pequeños.

Conclusión

Es muy útil cuando queremos tener la secuenciación en base a la partición y realizar las operaciones necesarias. Usando Cláusula ORDEN POR es obligatorio al utilizar la función ROW_NUMBER(). También usando el CTE podemos obtener los subconjuntos de la tabla a partir de las particiones ordenadas. El principal caso de uso de ROW_NUMBER() es la clasificación de las filas en función de diferentes particiones, lo cual es muy útil para fines de análisis de datos.