Microsoft SQL Server
Funzioni di classifica
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