Usare le funzioni finestra

Completato

Una funzione finestra consente di eseguire un'equazione matematica su un set di dati definito all'interno di una finestra. L'equazione matematica è in genere una funzione di aggregazione. Anziché a tutte le righe di una tabella, la funzione di aggregazione viene però applicata a un set di righe definite dalla funzione finestra.

Le funzioni finestra si usano per eseguire calcoli su un intervallo di dati, ma possono essere usate anche per definire a livello di codice una tecnica di deduplicazione dei dati o per impaginare i risultati.

Uno dei componenti chiave delle funzioni finestra è la clausola OVER. Questa clausola determina il partizionamento e l'ordinamento di un set di righe prima dell'applicazione della funzione finestra associata. In altre parole, la clausola OVER definisce una finestra o un set di righe specificato dall'utente all'interno di un set di risultati della query. Una funzione finestra calcola quindi un valore per ogni riga della finestra. È possibile utilizzare la clausola OVER con le funzioni per calcolare i valori aggregati, ad esempio medie mobili, aggregazioni cumulative, totali parziali o i primi N risultati per gruppo.

È quindi possibile usare le funzioni di aggregazione con la finestra espandendo la query che usa la clausola OVER. Sono supportate le funzioni di aggregazione seguenti, tra cui COUNT, MAX, AVG, SUM, APPROX_COUNT, DISTINCT, MIN, STDEV, STDEVP, STRING_AGG, VAR, VARP, GROUPING, GROUPING_ID, COUNT_BIG, CHECKSUM_AGG

In alternativa si possono usare funzioni di analisi, che consentono di calcolare un valore di aggregazione basato su un gruppo di righe. A differenza delle funzioni di aggregazione, tuttavia, le funzioni analitiche sono in grado di restituire più righe per ogni gruppo. Usare le funzioni di analisi per calcolare medie mobili, totali parziali, percentuali o i primi N risultati all'interno di un gruppo. Sono supportate le funzioni LAG, LEAD, FIRST_VALUE, LAST_VALUE, CUME_DIST, PERCENTILE_CONT, PERCENTILE_DISC, PERCENT_RANK

È possibile usare le clausole ROWS e RANGE per limitare ulteriormente le righe nella partizione specificando i punti di inizio e di fine all'interno della partizione. A tale scopo, è necessario specificare un intervallo di righe rispetto alla riga corrente in base all'associazione logica o all'associazione fisica. L'associazione fisica viene eseguita mediante la clausola ROWS. Sono supportate PRECEDING, UNBOUNDING PRECEDING, CURRENT ROW, BETWEEN, FOLLOWING, UNBOUNDED FOLLOWING

Infine, le funzioni finestra supportano le funzioni di rango come RANK, NTILE, DENSE_RANK, ROW_NUMBER.