DENSE_RANK (Transact-SQL)
Restituisce il rango delle righe nella partizione di un set dei risultati, senza gap nell'assegnazione dei ranghi. Il rango di una riga corrisponde a 1 più il numero di ranghi distinti che precedono la riga in questione.
Convenzioni della sintassi Transact-SQL
Sintassi
DENSE_RANK ( ) OVER ( [ < partition_by_clause > ] < order_by_clause > )
Argomenti
- < partition_by_clause >
Suddivide il set di risultati generato dalla clausola FROM in partizioni alle quali viene applicata la funzione DENSE_RANK. Per informazioni sulla sintassi di PARTITION BY, vedere Clausola OVER (Transact-SQL).
- < order_by_clause >
Determina l'ordine di applicazione dei valori DENSE_RANK alle righe in una partizione. Una colonna non può essere rappresentata da un valore integer nell'argomento <order_by_clause> utilizzato in una funzione di rango.
Tipi restituiti
bigint
Osservazioni
Se due o più righe hanno un valore equivalente per l'assegnazione del rango nella stessa partizione, a ogni riga viene assegnato lo stesso rango. Ad esempio, se sono presenti due venditori che hanno raggiunto i risultati di vendita maggiori con lo stesso valore SalesYTD, a entrambi verrà assegnato il rango 1. Al venditore con il valore successivo SalesYTD più alto verrà assegnato il rango 2. Tale valore di rango corrisponde a 1 più il numero di righe distinte che precedono questa riga. I numeri restituiti dalla funzione DENSE_RANK sono pertanto sempre consecutivi e senza gap.
L'ordinamento utilizzato per l'intera query determina l'ordine di visualizzazione delle righe nel risultato. Ciò significa che una riga con numero di rango 1 non sarà necessariamente la prima riga nella partizione.
Esempi
Nell'esempio seguente viene restituito il valore DENSE_RANK
della quantità di prodotti nelle varie posizioni. Si noti che ORDER BY
nella clausola OVER
ordina DENSE_RANK
e che ORDER BY
dell'istruzione SELECT
ordina il set di risultati.
USE AdventureWorks;
GO
SELECT i.ProductID, p.Name, i.LocationID, i.Quantity,
DENSE_RANK() OVER (PARTITION BY i.LocationID ORDER BY i.Quantity) AS DENSE_RANK
FROM Production.ProductInventory i
JOIN Production.Product p ON i.ProductID = p.ProductID
ORDER BY Name;
GO
Vedere anche
Riferimento
RANK (Transact-SQL)
ROW_NUMBER (Transact-SQL)
NTILE (Transact-SQL)
Funzioni di rango (Transact-SQL)
Funzioni (Transact-SQL)