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à.
SUMfunzione finestra
La funzione SUM window restituisce la somma dei valori della colonna di input o dell'espressione. La SUM funzione funziona con valori numerici e ignora i valori. NULL
Sintassi
SUM ( [ ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
Argomenti
- expression
-
L'espressione o colonna di destinazione su cui viene eseguita la funzione.
- ALL
-
Con l'argomentoALL, la funzione conserva tutti i valori duplicati dell'espressione. ALLè l'impostazione predefinita. DISTINCT non è supportato.
- OVER
-
Specifica le clausole finestra per le funzioni di aggregazione. La OVER clausola distingue le funzioni di aggregazione delle finestre dalle normali funzioni di aggregazione degli insiemi.
- PARTITIONDI expr_list
-
Definisce la finestra per la SUM funzione in termini di una o più espressioni.
- ORDERDI order_list
-
Ordina le righe all'interno di ogni partizione. Se non viene specificato alcun PARTITION BY, ORDER BY utilizza l'intera tabella.
- frame_clause
-
Se viene utilizzata una clausola ORDER BY per una funzione aggregata, è necessaria una clausola frame esplicita. La clausola frame raffina l'insieme di righe in una finestra della funzione, includendo o escludendo insieme di righe all'interno del risultato ordinato. La clausola frame è composta dalla parola chiave e dagli specificatori associatiROWS. Per informazioni, consultare Riepilogo della sintassi della funzione finestra.
Tipi di dati
I tipi di argomento supportati dalla SUM funzione sonoSMALLINT,,INTEGER,, BIGINT NUMERICDECIMAL, REAL e. DOUBLE PRECISION
I tipi di ritorno supportati dalla SUM funzione sono:
-
BIGINTper i SMALLINT nostri INTEGER argomenti
-
NUMERICper BIGINT argomenti
-
DOUBLEPRECISIONper argomenti a virgola mobile
Esempi
Nel seguente esempio viene creata una somma cumulativa (rolling) delle quantità di vendita ordinate per data e ID vendite:
select salesid, dateid, sellerid, qty, sum(qty) over (order by dateid, salesid rows unbounded preceding) as sum from winsales order by 2,1; salesid | dateid | sellerid | qty | sum ---------+------------+----------+-----+----- 30001 | 2003-08-02 | 3 | 10 | 10 10001 | 2003-12-24 | 1 | 10 | 20 10005 | 2003-12-24 | 1 | 30 | 50 40001 | 2004-01-09 | 4 | 40 | 90 10006 | 2004-01-18 | 1 | 10 | 100 20001 | 2004-02-12 | 2 | 20 | 120 40005 | 2004-02-12 | 4 | 10 | 130 20002 | 2004-02-16 | 2 | 20 | 150 30003 | 2004-04-18 | 3 | 15 | 165 30004 | 2004-04-18 | 3 | 20 | 185 30007 | 2004-09-07 | 3 | 30 | 215 (11 rows)
Per una descrizione della WINSALES tabella, vedere. Tabella di esempio per gli esempi della funzione finestra
Nel seguente esempio viene creata una somma cumulativa (rolling) delle quantità di vendita per data, i risultati sono partizionati per ID venditore e all'interno della partizione i risultati sono ordinati per data e ID vendite:
select salesid, dateid, sellerid, qty, sum(qty) over (partition by sellerid order by dateid, salesid rows unbounded preceding) as sum from winsales order by 2,1; salesid | dateid | sellerid | qty | sum ---------+------------+----------+-----+----- 30001 | 2003-08-02 | 3 | 10 | 10 10001 | 2003-12-24 | 1 | 10 | 10 10005 | 2003-12-24 | 1 | 30 | 40 40001 | 2004-01-09 | 4 | 40 | 40 10006 | 2004-01-18 | 1 | 10 | 50 20001 | 2004-02-12 | 2 | 20 | 20 40005 | 2004-02-12 | 4 | 10 | 50 20002 | 2004-02-16 | 2 | 20 | 40 30003 | 2004-04-18 | 3 | 15 | 25 30004 | 2004-04-18 | 3 | 20 | 45 30007 | 2004-09-07 | 3 | 30 | 75 (11 rows)
L'esempio seguente numera tutte le righe in sequenza nel set di risultati, ordinate in base alle SALESID colonne SELLERID e:
select salesid, sellerid, qty, sum(1) over (order by sellerid, salesid rows unbounded preceding) as rownum from winsales order by 2,1; salesid | sellerid | qty | rownum --------+----------+------+-------- 10001 | 1 | 10 | 1 10005 | 1 | 30 | 2 10006 | 1 | 10 | 3 20001 | 2 | 20 | 4 20002 | 2 | 20 | 5 30001 | 3 | 10 | 6 30003 | 3 | 15 | 7 30004 | 3 | 20 | 8 30007 | 3 | 30 | 9 40001 | 4 | 40 | 10 40005 | 4 | 10 | 11 (11 rows)
Per una descrizione della WINSALES tabella, vedereTabella di esempio per gli esempi della funzione finestra.
L'esempio seguente numera tutte le righe in sequenza nel set di risultati, partiziona i risultati in base SELLERID e ordina i risultati in base SELLERID e SALESID all'interno della partizione:
select salesid, sellerid, qty, sum(1) over (partition by sellerid order by sellerid, salesid rows unbounded preceding) as rownum from winsales order by 2,1; salesid | sellerid | qty | rownum ---------+----------+-----+-------- 10001 | 1 | 10 | 1 10005 | 1 | 30 | 2 10006 | 1 | 10 | 3 20001 | 2 | 20 | 1 20002 | 2 | 20 | 2 30001 | 3 | 10 | 1 30003 | 3 | 15 | 2 30004 | 3 | 20 | 3 30007 | 3 | 30 | 4 40001 | 4 | 40 | 1 40005 | 4 | 10 | 2 (11 rows)