sql >> Base de Datos >  >> RDS >> Database

Cómo numerar filas en SQL

Problema:

Le gustaría dar a cada fila de la tabla de resultados un número separado.

Ejemplo:

Nuestra base de datos tiene una tabla llamada furniture con datos en las siguientes columnas:code (clave principal) y name .

código nombre
101 cama
202 sofá
333 silla
123 estantería
235 tabla
766 escritorio

Los furniture tabla almacena el nombre de los muebles que queremos numerar.

Solución:

SELECT ROW_NUMBER() OVER() AS num_row,
  code, 
  name
FROM furniture;

La consulta devuelve el número de fila de cada mueble junto con su nombre y código:

núm_fila nombre código
1 cama 101
2 sofá 202
3 silla 333
4 estantería 123
5 tabla 235
6 escritorio 766

Tenga en cuenta que los nombres de los muebles no están ordenados.

Discusión:

Si desea numerar cada fila en un conjunto de resultados, SQL proporciona el ROW_NUMBER() función. Esta función se usa en un SELECT cláusula con otras columnas. Después del ROW_NUMBER() cláusula, llamamos al OVER() función. Si pasa algún argumento a OVER , la numeración de las filas no se ordenará según ninguna columna. Por lo tanto, el orden de las filas mostradas no será determinista; en la mayoría de los casos, es el orden en que se insertaron los registros en la tabla. La numeración de filas comienza en 1. En nuestro ejemplo, cada registro tiene un número del 1 al 6.

También podemos asignar números de fila usando una columna. En el siguiente ejemplo, numeramos los registros ordenados por nombre. Hacemos esto pasando ese argumento a OVER junto con ORDER BY (ordena los registros según la columna del nombre):

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture;

Al observar el conjunto de resultados, verá las filas ordenadas con sus números:

fila nombre código
1 cama 101
2 estantería 123
3 silla 333
4 escritorio 766
5 sofá 202
6 tabla 235

La numeración proporcionada por ROW_NUMBER() es independiente del orden de las filas en la tabla de resultados. En el siguiente ejemplo, numeramos los registros usando el nombre de la columna ordenada (OVER(ORDER BY name) ), pero mostramos registros en el conjunto de resultados según otra columna (en nuestro ejemplo, ORDER BY code ).

SELECT ROW_NUMBER() OVER(ORDER BY name) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code;

La consulta devolvió el número de cada fila, pero estos números no están en orden ascendente porque los registros se ordenan según el código de columna:

fila nombre código
1 cama 101
2 estantería 123
5 sofá 202
6 tabla 235
3 silla 333
4 escritorio 766

El orden predeterminado de las filas ordenadas es ascendente, pero también puede ordenarlas en orden descendente usando DESC palabra clave después del nombre de la columna por la que desea ordenar:

SELECT ROW_NUMBER() OVER(ORDER BY name ASC) AS num_row,
  name, 
  code
FROM furniture
ORDER BY code DESC;

La consulta anterior devolvió el conjunto de resultados:

fila nombre código
4 escritorio 766
3 silla 333
6 tabla 235
5 sofá 202
2 estantería 123
1 cama 101