Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
RANKfunzione finestra
La funzione RANK window determina il rango di un valore in un gruppo di valori, in base all'espressione ORDER BY nella OVER clausola. Se è presente la clausola facoltativa PARTITION BY, le classificazioni vengono reimpostate per ogni gruppo di righe. Righe con valori uguali per i criteri di classificazione ricevono la stessa classificazione. Amazon Redshift aggiunge il numero di righe vincolate alla classificazione vincolata per calcolare la classificazione successiva pertanto le classificazioni potrebbero non essere numeri consecutivi. Ad esempio, se due righe sono classificate come 1, il livello successivo è 3.
RANKdifferisce da quella DENSEfunzione _ RANK window sotto un aspetto: per DENSE _RANK, se due o più righe sono uguali, non vi è alcuna lacuna nella sequenza dei valori classificati. Ad esempio, se due righe sono classificate come 1, il livello successivo è 2.
È possibile avere funzioni di classificazione con clausole PARTITION BY e ORDER BY diverse nella stessa query.
Sintassi
RANK () OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list ] )
Argomenti
- ( )
-
La funzione non accetta argomenti, ma le parentesi vuote sono obbligatorie.
- OVER
-
Le clausole della finestra per la funzione. RANK
- PARTITIONDI expr_list
-
Facoltativo. Una o più espressioni che definiscono la finestra.
- ORDERDI order_list
-
Facoltativo. Definisce le colonne su cui si basano i valori di classificazione. Se non viene specificato alcun PARTITION BY, ORDER BY utilizza l'intera tabella. Se ORDER BY viene omesso, il valore restituito è 1 per tutte le righe.
Se ORDER BY non produce un ordinamento univoco, l'ordine delle righe non è deterministico. Per ulteriori informazioni, consulta Ordinamento univoco dei dati per le funzioni finestra.
Tipo restituito
INTEGER
Esempi
Nel seguente esempio la tabella viene ordinata in base alla quantità venduta (in ordine crescente per impostazione predefinita) e viene assegnata una classificazione a ciascuna riga. Un valore di classificazione pari a 1 è il valore di classificazione più alto. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra:
select salesid, qty, rank() over (order by qty) as rnk from winsales order by 2,1; salesid | qty | rnk --------+-----+----- 10001 | 10 | 1 10006 | 10 | 1 30001 | 10 | 1 40005 | 10 | 1 30003 | 15 | 5 20001 | 20 | 6 20002 | 20 | 6 30004 | 20 | 6 10005 | 30 | 9 30007 | 30 | 9 40001 | 40 | 11 (11 rows)
Tieni presente che la clausola ORDER BY esterna in questo esempio include le colonne 2 e 1 per garantire che Amazon Redshift restituisca risultati ordinati in modo coerente ogni volta che viene eseguita questa query. Ad esempio, le righe con sales IDs 10001 e 10006 hanno valori e identici. QTY RNK Ordinare il risultato finale impostato in base alla colonna 1 assicura che la riga 10001 cada sempre prima di 10006. Per una descrizione della WINSALES tabella, vedere. Tabella di esempio per gli esempi della funzione finestra
Nel seguente esempio, l'ordinamento è invertito per la funzione finestra (order
by qty desc
). Ora il valore di rango più alto si applica al QTY valore più alto.
select salesid, qty, rank() over (order by qty desc) as rank from winsales order by 2,1; salesid | qty | rank ---------+-----+----- 10001 | 10 | 8 10006 | 10 | 8 30001 | 10 | 8 40005 | 10 | 8 30003 | 15 | 7 20001 | 20 | 4 20002 | 20 | 4 30004 | 20 | 4 10005 | 30 | 2 30007 | 30 | 2 40001 | 40 | 1 (11 rows)
Per una descrizione della WINSALES tabella, vedereTabella di esempio per gli esempi della funzione finestra.
L'esempio seguente partiziona la tabella SELLERID e ordina ogni partizione in base alla quantità (in ordine decrescente) e assegna una classificazione a ciascuna riga. I risultati vengono ordinati dopo aver applicato i risultati della funzione finestra.
select salesid, sellerid, qty, rank() over (partition by sellerid order by qty desc) as rank from winsales order by 2,3,1; salesid | sellerid | qty | rank --------+----------+-----+----- 10001 | 1 | 10 | 2 10006 | 1 | 10 | 2 10005 | 1 | 30 | 1 20001 | 2 | 20 | 1 20002 | 2 | 20 | 1 30001 | 3 | 10 | 4 30003 | 3 | 15 | 3 30004 | 3 | 20 | 2 30007 | 3 | 30 | 1 40005 | 4 | 10 | 2 40001 | 4 | 40 | 1 (11 rows)