Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
SUMfungsi jendela
Fungsi SUM jendela mengembalikan jumlah kolom input atau nilai ekspresi. SUMFungsi ini bekerja dengan nilai numerik dan mengabaikan NULL nilai.
Sintaks
SUM ( [ ALL ] expression ) OVER ( [ PARTITION BY expr_list ] [ ORDER BY order_list frame_clause ] )
Argumen
- ekspresi
-
Kolom target atau ekspresi tempat fungsi beroperasi.
- ALL
-
Dengan argumenALL, fungsi mempertahankan semua nilai duplikat dari ekspresi. ALLadalah default. DISTINCT tidak didukung.
- OVER
-
Menentukan klausa jendela untuk fungsi agregasi. OVERKlausa membedakan fungsi agregasi jendela dari fungsi agregasi set normal.
- PARTITIONOLEH expr_list
-
Mendefinisikan jendela untuk SUM fungsi dalam hal satu atau lebih ekspresi.
- ORDEROLEH order_list
-
Mengurutkan baris dalam setiap partisi. Jika tidak ada PARTITION BY yang ditentukan, ORDER BY menggunakan seluruh tabel.
- frame_clause
-
Jika klausa ORDER BY digunakan untuk fungsi agregat, klausa bingkai eksplisit diperlukan. Klausa bingkai menyempurnakan kumpulan baris di jendela fungsi, termasuk atau mengecualikan kumpulan baris dalam hasil yang diurutkan. Klausa bingkai terdiri dari ROWS kata kunci dan penentu terkait. Lihat Ringkasan sintaks fungsi jendela.
Jenis data
Tipe argumen yang didukung oleh SUM fungsi adalahSMALLINT,INTEGER,BIGINT,NUMERIC,DECIMAL,REAL, dan DOUBLEPRECISION.
Jenis pengembalian yang didukung oleh SUM fungsi adalah:
-
BIGINTuntuk SMALLINT atau INTEGER argumen
-
NUMERICuntuk BIGINT argumen
-
DOUBLEPRECISIONuntuk argumen floating-point
Contoh
Contoh berikut membuat jumlah kumulatif (bergulir) jumlah penjualan yang diurutkan berdasarkan tanggal dan ID penjualan:
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)
Untuk deskripsi WINSALES tabel, lihatContoh tabel untuk contoh fungsi jendela.
Contoh berikut membuat jumlah kumulatif (bergulir) jumlah penjualan berdasarkan tanggal, mempartisi hasil dengan ID penjual, dan memesan hasil berdasarkan tanggal dan ID penjualan dalam partisi:
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)
Contoh berikut memberi nomor semua baris secara berurutan dalam kumpulan hasil, diurutkan oleh kolom SELLERID danSALESID:
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)
Untuk deskripsi WINSALES tabel, lihatContoh tabel untuk contoh fungsi jendela.
Contoh berikut memberi nomor semua baris secara berurutan dalam kumpulan hasil, partisi hasil denganSELLERID, dan urutkan hasilnya dengan SELLERID dan di SALESID dalam partisi:
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)