Buscar..


Sintaxis

  • DENSE_RANK () OVER ([<partition_by_clause>] <order_by_clause>)
  • RANK () OVER ([partition_by_clause] order_by_clause)

Parámetros

Argumentos Detalles
<partition_by_clause> Divide el conjunto de resultados producido por la cláusula FROM en particiones a las que se aplica la función DENSE_RANK . Para la sintaxis de PARTITION BY , vea Cláusula OVER (Transact-SQL) .
<order_by_clause> Determina el orden en que se aplica la función DENSE_RANK a las filas en una partición.
OVER ( [ partition_by_clause ] order_by_clause) partition_by_clause divide el conjunto de resultados producido por la cláusula FROM en particiones a las que se aplica la función. Si no se especifica, la función trata todas las filas del conjunto de resultados de la consulta como un solo grupo. order_by_clause determina el orden de los datos antes de que se aplique la función. El order_by_clause es obligatorio. La <rows or range clause> de la cláusula OVER no se puede especificar para la función RANK . Para obtener más información, consulte la cláusula OVER (Transact-SQL) .

Observaciones

Si dos o más filas se unen para un rango en la misma partición, cada fila recibe el mismo rango. Por ejemplo, si los dos principales vendedores tienen el mismo valor de SalesYTD, ambos están clasificados uno. El vendedor con el siguiente mayor SalesYTD ocupa el puesto número dos. Este es uno más que el número de filas distintas que vienen antes de esta fila. Por lo tanto, los números devueltos por la función DENSE_RANK no tienen espacios vacíos y siempre tienen rangos consecutivos.

El orden de clasificación utilizado para toda la consulta determina el orden en que aparecen las filas en un resultado. Esto implica que una fila clasificada número uno no tiene que ser la primera fila en la partición.

DENSE_RANK no es determinista. Para obtener más información, consulte Funciones deterministas y no deterministas .

RANGO()

UN RANGO () Devuelve el rango de cada fila en el conjunto de resultados de la columna particionada.

P.ej :

Select Studentid,Name,Subject,Marks,
RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name,subject

   Studentid    Name    Subject    Marks    Rank

    101         Ivan    Maths       70       2
    101         Ivan    Science     80       1
    101         Ivan    Social      60       3
    102         Ryan    Maths       60       2
    102         Ryan    Science     50       3
    102         Ryan    Social      70       1
    103         Tanvi   Maths       90       1
    103         Tanvi   Science     90       1
    103         Tanvi   Social      80       3

DENSE_RANK ()

Igual que el de RANK (). Vuelve el rango sin ningún tipo de brechas:

Select  Studentid, Name,Subject,Marks,
DENSE_RANK() over(partition by name order by Marks desc)Rank
From Exam
order by name

Studentid    Name    Subject    Marks    Rank
101          Ivan    Science    80       1
101          Ivan    Maths      70       2
101          Ivan    Social     60       3
102          Ryan    Social     70       1
102          Ryan    Maths      60       2
102          Ryan    Science    50       3
103          Tanvi   Maths      90       1
103          Tanvi   Science    90       1
103          Tanvi   Social     80       2


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow