Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni window
PrecedenteFunzioni aggregateEspressioni sottoquerySuccessivo

9.19. Funzioni window

Le funzioni window hanno l'abilità di eseguire calcoli su insiemi di righe che sono correlate alla riga interrogata correntemente. Vedere Sezione 3.5, «Funzioni di Finestra» per un'introduzione a questa caratteristica.

Le funzioni window incorporate sono elencate in Tabella 9.44, «Funzioni window di utilizzo generale». Notare che queste funzioni devono essere invocate usando la sintassi delle funzioni window; dove cioè è richiesta una clausola OVER.

In aggiunta a queste funzioni, qualsiasi funzione aggregata incorporata o definita dall'utente può essere usata come una funzione window (vedere Sezione 9.18, «Funzioni aggregate» per un elenco delle aggretate incorporate). Le funzioni aggregate agiscono come funzioni window solo quando una clausola OVER segue la chiamata; altrimenti si comportano come funzioni aggregate normali.

Tabella 9.44. Funzioni window di utilizzo generale

FunzioneTipo di ritornoDescrizione
row_number() bigint numero della riga corrente all'interno della sua partizione, partendo da 1
rank() bigint Rank of the current row with gaps; same as row_number of its first peer
dense_rank() bigint rank of the current row without gaps; this function counts peer groups
percent_rank() double precision relative rank of the current row: (rank - 1) / (total rows - 1)
cume_dist() double precision grado relativo della riga corrente: (numero di righe che precedono la riga corrente) / (righe totali)
ntile(num_buckets, integer) integer intero che va da 1 al valore dell'argomento, che divide la partizione più equamente possibile.
lag(value, any [, offset, integer [, default, any ]]) stesso tipo di value ritorna value valutato alla riga che è scostato di offset righe prima la riga corrente all'interno della partizione; se non c'è quella riga, invece di restituire default. Sia offset che default sono valutati con rispetto alla riga corrente. Se omesso, offset diventa 1 e default diventa null.
lead(value, any [, offset, integer [, default, any ]]) stesso tipo di value ritorna value valutato alla riga che è scostato di offset righe dopo la riga corrente all'interno della partizione; se non c'è quella riga, invece di restituire default. Sia offset che default sono valutati con rispetto alla riga corrente. Se omesso, offset diventa 1 e default diventa null.
first_value(value, any) stesso tipo di value ritorna value valutato alla riga che è la prima del window frame
last_value(value, any) stesso tipo di value ritorna value valutato alla riga che è l'ultima del window frame
nth_value(value, any, nth, integer) stesso tipo di value ritorna value valutato alla riga che è la nth-sima del window frame (contando da 1); null se non esiste

Tutte le funzioni elencate in Tabella 9.44, «Funzioni window di utilizzo generale» dipendono dal tipo di ordinamento specificato dalla clausola ORDER BY della definizione di window associata. Righe che non sono distinte nell'ordinamento ORDER BY sono chiamate peer; Le quattro funzioni di classificazione sono definite per dare la stessa risposta per ogni due righe peer.

Notare che first_value, last_value e nth_value considerano solo le righe all'interno del «window frame», che in maniera predefinita contiene le righe dall'inizio della partizione all'ultimo peer della riga corrente. Queso, probabilmente, darà risultati non autili per last_value e a volte anche nth_value. È possibile ridefinire il frame aggiungendo una specificazione di window adatta (RANGE o ROWS) alla clausola OVER. Vedere Sezione 4.2.8, «Chiamate a funzioni finestra» per maggiori informazioni sulle specificazioni del frame.

Quando una funziona aggregata è usata come una funzione window, essa aggrega le righe all'interno del window frame corrente. Un'aggregata usata con ORDER BY e la definizione di window frame predefinita, produce un tipo di comportamento "«running sum»", che potrebbe essere voluto o no. Per ottenere aggregazione sull'intera partizione, omettere ORDER BY o usare ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING. Altre specificazioni di frame possono essere usate per ottenere altri effetti.

[Nota]

Nota

Lo standard SQL definisce un'opzione RESPECT NULLS o IGNORE NULLS per lead, lag, first_value, last_value e nth_value. Questo non è implementato in PostgreSQL™: il comportamento è sempre lo stesso di quello predefinito dello standard, cioè RESPECT NULLS. Ugualmente, l'opzione standard FROM FIRST o FROM LAST per nth_value non è implementata: solo il comportamento FROM FIRST è supportato. (Puoi ottenere il risultato di FROM LAST invertendo l'ordine con ORDER BY).

Documentazione di PostgreSQL 9.0 > Il linguaggio SQL > Funzioni e Operatori > Funzioni window
PrecedenteFunzioni aggregateEspressioni sottoquerySuccessivo