row_number over number ejemplo sql sql-server row-number

sql - over - ¿Cómo uso ROW_NUMBER()?



row_number() sql server (9)

Aunque estoy de acuerdo con otros en que puedes usar count() para obtener el número total de filas, aquí puedes usar row_count() :

  1. Para obtener el número total de filas:

    with temp as ( select row_number() over (order by id) as rownum from table_name ) select max(rownum) from temp

  2. Para obtener los números de fila donde el nombre es Matt:

    with temp as ( select name, row_number() over (order by id) as rownum from table_name ) select rownum from temp where name like ''Matt''

Puedes usar min(rownum) o max(rownum) para obtener la primera o la última fila para Matt respectivamente.

Estas fueron implementaciones muy simples de row_number() . Puede usarlo para agrupaciones más complejas. Mira mi respuesta en la Agrupación avanzada sin usar una sub consulta

Quiero usar ROW_NUMBER() para obtener ...

  1. Para obtener el max(ROW_NUMBER()) -> O supongo que este también sería el recuento de todas las filas

Intenté hacer:

SELECT max(ROW_NUMBER() OVER(ORDER BY UserId)) FROM Users

pero no pareció funcionar ...

  1. Para obtener ROW_NUMBER() utilizando una determinada información, es decir. si tengo un nombre y quiero saber de qué fila proviene el nombre.

Supongo que sería algo similar a lo que probé para # 1

SELECT ROW_NUMBER() OVER(ORDER BY UserId) From Users WHERE UserName=''Joe''

pero esto tampoco funcionó ...

¿Algunas ideas?


Para la primera pregunta, ¿por qué no solo usar?

SELECT COUNT(*) FROM myTable

para obtener el conteo.

Y para la segunda pregunta, la clave principal de la fila es qué se debe usar para identificar una fila en particular. No intentes usar el número de fila para eso.

Si devolvió Row_Number () en su consulta principal,

SELECT ROW_NUMBER() OVER (Order by Id) AS RowNumber, Field1, Field2, Field3 FROM User

Luego, cuando quiera ir 5 filas hacia atrás, puede tomar el número de fila actual y usar la siguiente consulta para determinar la fila con currentrow -5

SELECT us.Id FROM (SELECT ROW_NUMBER() OVER (ORDER BY id) AS Row, Id FROM User ) us WHERE Row = CurrentRow - 5


Puede no estar relacionado con la pregunta aquí. Pero encontré que podría ser útil al usar el número de fila -

SELECT *, ROW_NUMBER () OVER (ORDER BY (SELECCIONAR 100)) COMO Any_ID FROM #Any_Table


Puede usar Row_Number para el resultado de consulta límite.

Ejemplo:

SELECT * FROM ( select row_number() OVER (order by createtime desc) AS ROWINDEX,* from TABLENAME ) TB WHERE TB.ROWINDEX between 0 and 10

- Con la consulta anterior, obtendré la PÁGINA 1 de los resultados de TABLENAME .


Si desea usar ROW_NUMBER para esto (en lugar de count (*)) siempre puede usar:

SELECT TOP 1 ROW_NUMBER() OVER (ORDER BY Id) FROM USERS ORDER BY ROW_NUMBER() OVER (ORDER BY Id) DESC


Si necesita devolver el recuento total de filas de la tabla, puede usar una forma alternativa a la SELECT COUNT(*) .

Como SELECT COUNT(*) realiza un escaneo completo de la tabla para devolver el recuento de filas, puede tomar mucho tiempo para una tabla grande. En este caso, puede usar la tabla del sistema sysindexes . Hay una columna ROWS que contiene el recuento total de filas para cada tabla en su base de datos. Puede usar la siguiente instrucción select:

SELECT rows FROM sysindexes WHERE id = OBJECT_ID(''table_name'') AND indid < 2

Esto reducirá drásticamente el tiempo que tarda su consulta.



ROW_NUMBER() devuelve un número único para cada fila que comienza con 1. Puede usar esto simplemente escribiendo:

ROW_NUMBER() OVER (ORDER BY ''Column_Name'' DESC) as ROW_NUMBER

Puede encontrar la diferencia entre Row_number() , Rank() y Dense_Rank() here .


SELECT num, UserName FROM (SELECT UserName, ROW_NUMBER() OVER(ORDER BY UserId) AS num From Users) AS numbered WHERE UserName=''Joe''