RANK
Descrizione
RANK
è una funzione di aggregazione della finestra utilizzata per assegnare un numero di classifica a ogni riga di un gruppo. Se più righe hanno lo stesso valore di classifica (è presente una parità), il sistema assegna lo stesso valore di classifica alle righe abbinate e ignora la posizione di classifica successiva.Il
PARTITION BY
La clausola determina i campi da utilizzare per suddividere un insieme di righe di input in gruppi.Il
ORDER BY
La clausola determina come ordinare le righe nella partizione prima che vengano classificate. Il sistema separa le righe di input in gruppi in base ai campi di partizionamento, ordina le righe in base ai campi di ordinamento e quindi calcola l'espressione aggregata (classifica per questa funzione) in ogni gruppo. Le righe classificate in ogni gruppo iniziano da 1.
Sintassi
RANK()OVER(PARTITION BYpartitioning_field[,partitioning_field]ORDER BYordering_field[ASC | DESC] [,ordering_field[ASC | DESC]] )
Valore restituito
Restituisce un valore di tipo
Integer
.Parametri di input
- OVER()
- ObbligatorioOVERdeve essere utilizzato all'interno di aRANKespressione
- PARTITION BYpartitioning_field
- Sono obbligatori. Utilizzare ilPARTITION BYper specificare uno o più campi da utilizzare per partizionare un gruppo di righe di input. È possibile specificare qualsiasi tipo di campo tranne Valuta. Esempio: si specifica il campo Mese come campo di partizionamento, in modo che il sistema raggruppa in un'unica partizione tutti i record che hanno lo stesso valore per il mese.
- ORDER BYordering_field
- Sono obbligatori. Utilizzare ilORDER BYper specificare come ordinare le righe di input nella partizione utilizzando i valori nel campo specificato all'interno di ogni partizione. È possibile specificare qualsiasi tipo di campo tranne Valuta.È possibile utilizzareDESCoASCper ordinare le parole chiave in ordine decrescente (valori da decrescente, valori NULL ultimi) o crescente (valori decrescenti, valori NULL primi) per ogni campo di ordinamento. Se non si specifica un ordinamento per un campo di ordinamento, il sistema ordina automaticamente le righe in ordine crescente.
Esempi
Esempio: si dispone di un set di dati con queste righe e questi campi.
Dipendente | Data vendita | Vendite |
|---|---|---|
Ehi | 12/31/2018 | 140 |
Ehi | 11/30/2018 | 60 |
Ehi | 10/31/2018 | 140 |
Freeman | 12/31/2018 | 160 |
Freeman | 11/30/2018 | 60 |
Freeman | 10/31/2018 | 110 |
Smith | 12/31/2018 | 140 |
Smith | 11/30/2018 | 60 |
Smith | 10/31/2018 | 120 |
È possibile classificare le vendite di ogni dipendente in ordine decrescente, in modo che alle vendite più alte venga assegnato un punteggio pari a 1. Utilizzare questa espressione nel campo
Classificazione vendite per dipendente
:RANK() OVER( PARTITION BY [Employee] ORDER BY [Sales] DESC)
Si ottengono i seguenti risultati:
Dipendente | Data vendita | Vendite | Classificare le vendite per dipendente |
|---|---|---|---|
Ehi | 12/31/2018 | 140 | 1 |
Ehi | 10/31/2018 | 140 | 1 |
Ehi | 11/30/2018 | 60 | 3 |
Freeman | 12/31/2018 | 160 | 1 |
Freeman | 10/31/2018 | 110 | 2 |
Freeman | 11/30/2018 | 60 | 3 |
Smith | 12/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
Smith | 11/30/2018 | 60 | 3 |
È anche possibile classificare le vendite per ogni data in ordine decrescente, in modo che alle vendite più alte venga assegnata una classifica di 1. Utilizzare questa espressione nel campo
Classificazione vendite per data
:RANK() OVER( PARTITION BY [Sales Date] ORDER BY [Sales] DESC)
Si ottengono i seguenti risultati:
Dipendente | Data vendita | Vendite | Classificare le vendite per data |
|---|---|---|---|
Freeman | 12/31/2018 | 160 | 1 |
Ehi | 12/31/2018 | 140 | 2 |
Smith | 12/31/2018 | 140 | 2 |
Ehi | 11/30/2018 | 60 | 1 |
Freeman | 11/30/2018 | 60 | 1 |
Smith | 11/30/2018 | 60 | 1 |
Ehi | 10/31/2018 | 140 | 1 |
Smith | 10/31/2018 | 120 | 2 |
Freeman | 10/31/2018 | 110 | 3 |
Si noti che ai valori abbinati viene assegnato lo stesso numero di classifica e la posizione della classifica seguente viene ignorata.