row_number over number ejemplos ejemplo sql sql-server tsql group-by rank

over - Consulta de SQL Server para Rango(RowNumber) y Agrupaciones



row_number() sql server (2)

Utilice "Partición por" en la cláusula OVER de la función de clasificación

SELECT Rank() over (Partition by Category Order by Value, User, Category) as ranks, Category, User FROM Table1 Group By User, Category, Value Order by ranks asc

Tengo una tabla que tiene algunas columnas: Usuario, Categoría, Valor

Y quiero hacer una consulta que me dé una clasificación, de todos los usuarios por el valor, pero restablecer para la categoría.

Ejemplo:

user1 CategoryA 10 user2 CategoryA 11 user3 CategoryA 9 user4 CategoryB 3 user1 CategoryB 11

la consulta volvería:

Rank User Category 1 user2 CategoryA 2 user1 CategoryA 3 user3 CategoryA 1 user1 CategoryB 2 user4 CategoryB

¿Algunas ideas?

Escribo la consulta y especifico la categoría. Funciona, pero luego tengo que escribir bucles y es muy lento.


Select User, Category, (Select Count(*) From Table Where Category = A.Category And Value <= A.Value) Rank From Table A Order By Category, Value

Si el valor puede tener duplicados, debe decidir si desea "contar" los duplicados (equivalente a RANK) o no (equivalente a DENSE_RANK, thanx @shannon)

Rango ordinario:

Select User, Category, (Select 1 + Count(*) From Table -- "1 +" gives 1-based rank, Where Category = A.Category -- take it out to get 0-based rank And Value < A.Value) Rank From Table A Order By Category, Value

Rango "Denso":

Select User, Category, (Select 1 + Count(Distinct Value) -- "1 +" gives 1-based rank, From Table -- take it out to get 0-based rank Where Category = A.Category And Value < A.Value) Rank From Table A Order By Category, Value