Ricerca…


Sintassi

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

Parametri

argomenti Dettagli
<partition_by_clause> Divide il set di risultati prodotto dalla clausola FROM in partizioni a cui viene applicata la funzione DENSE_RANK . Per la sintassi PARTITION BY , vedere la clausola OVER (Transact-SQL) .
<order_by_clause> Determina l'ordine in cui la funzione DENSE_RANK viene applicata alle righe in una partizione.
OVER ( [ partition_by_clause ] order_by_clause) partition_by_clause divide il set di risultati prodotto dalla clausola FROM in partizioni a cui viene applicata la funzione. Se non specificato, la funzione considera tutte le righe del set di risultati della query come un singolo gruppo. order_by_clause determina l'ordine dei dati prima che la funzione venga applicata. È richiesto order_by_clause. La <rows or range clause> delle <rows or range clause> della clausola OVER non può essere specificata per la funzione RANK . Per ulteriori informazioni, vedere Clausola OVER (Transact-SQL) .

Osservazioni

Se due o più righe si uniscono per un grado nella stessa partizione, ogni fila legata riceve lo stesso valore. Ad esempio, se i due migliori venditori hanno lo stesso valore SalesYTD, sono entrambi al primo posto. Il venditore con la successiva SalesYTD successiva è al secondo posto. Questo è uno in più del numero di righe distinte che precedono questa riga. Pertanto, i numeri restituiti dalla funzione DENSE_RANK non hanno spazi vuoti e hanno sempre ranghi consecutivi.

L'ordinamento utilizzato per l'intera query determina l'ordine in cui le righe vengono visualizzate in un risultato. Ciò implica che una riga classificata come numero uno non deve essere la prima riga nella partizione.

DENSE_RANK non è deterministico. Per ulteriori informazioni, vedere Funzioni deterministiche e non deterministiche .

RANGO()

A RANK () Restituisce il rango di ogni riga nel set di risultati della colonna partizionata.

Per esempio :

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 ()

Come quello di RANK (). Restituisce il rango senza spazi vuoti:

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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow