Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistem Platform Analitik (PDW)
Titik akhir analitik SQL di Microsoft Fabric
Gudang di Microsoft Fabric
Database SQL di Microsoft Fabric
Mengembalikan jumlah semua nilai, atau hanya DISTINCT nilai, dalam ekspresi.
SUM hanya dapat digunakan dengan kolom numerik. Nilai null diabaikan.
Sintaks
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Argumen
SEMUA
Menerapkan fungsi agregat ke semua nilai.
ALL adalah default.
NYATA
Menentukan yang SUM mengembalikan jumlah nilai unik.
expression
Konstanta, kolom, atau fungsi, dan kombinasi operator aritmatika, bitwise, dan string apa pun. ekspresi adalah ekspresi dari kategori jenis data numerik atau perkiraan numerik yang tepat, kecuali untuk jenis data bit . Fungsi dan subkueri agregat tidak diizinkan. Untuk informasi selengkapnya, lihat Ekspresi.
OVER ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause membagi tataan hasil yang dihasilkan oleh FROM klausul menjadi partisi tempat fungsi diterapkan. Jika tidak ditentukan, fungsi memperlakukan semua baris hasil kueri yang ditetapkan sebagai grup tunggal.
order_by_clause menentukan urutan logis tempat operasi dilakukan. Untuk informasi selengkapnya, lihat klausa SELECT - OVER.
Tipe pengembalian
Mengembalikan penjumlahan semua nilai ekspresi dalam jenis data ekspresi yang paling tepat.
| Hasil ekspresi | Tipe hasil |
|---|---|
| kecil | int |
| smallint | int |
| int | int |
| bigint | bigint |
| kategori desimal (p, s) | desimal(38, dtk) |
| kategori uang dan smallmoney | uang |
| float dan kategori nyata | float |
Keterangan
SUM adalah fungsi deterministik ketika digunakan tanpa OVER klausul dan ORDER BY . Ini nondeterministik ketika ditentukan dengan OVER klausul dan ORDER BY . Untuk informasi selengkapnya, lihat Fungsi deterministik dan nondeterministik.
Juga, SUM mungkin tampak berperilaku sebagai fungsi nondeterministik saat Anda menggunakannya dengan tipe data float dan nyata . Tetapi alasan yang mendasar adalah perkiraan sifat dari jenis data ini.
Contoh
Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.
J. Gunakan jumlah untuk mengembalikan data ringkasan
Contoh berikut menunjukkan penggunaan fungsi SUM untuk mengembalikan data ringkasan dalam database AdventureWorks2025.
SELECT Color, SUM(ListPrice), SUM(StandardCost)
FROM Production.Product
WHERE Color IS NOT NULL
AND ListPrice != 0.00
AND Name LIKE 'Mountain%'
GROUP BY Color
ORDER BY Color;
GO
Berikut set hasilnya.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Gunakan klausa over
Contoh berikut menggunakan SUM fungsi dengan OVER klausa untuk memberikan total kumulatif penjualan tahunan untuk setiap wilayah dalam Sales.SalesPerson tabel dalam database AdventureWorks2025. Data dipartisi oleh TerritoryID dan secara logis diurutkan oleh SalesYTD. Ini berarti bahwa SUM fungsi dihitung untuk setiap wilayah berdasarkan tahun penjualan. Untuk TerritoryID 1, ada dua baris untuk penjualan tahun 2005 mewakili dua orang penjualan dengan penjualan tahun itu. Nilai total penjualan kumulatif untuk kedua baris ini dihitung dan kemudian baris ketiga yang mewakili penjualan untuk tahun 2006 disertakan dalam komputasi.
SELECT BusinessEntityID,
TerritoryID,
DATEPART(yy, ModifiedDate) AS SalesYear,
CONVERT (VARCHAR (20), SalesYTD, 1) AS SalesYTD,
CONVERT (VARCHAR (20), AVG(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY DATEPART(yy, ModifiedDate)), 1) AS MovingAvg,
CONVERT (VARCHAR (20), SUM(SalesYTD) OVER (PARTITION BY TerritoryID ORDER BY DATEPART(yy, ModifiedDate)), 1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL
OR TerritoryID < 5
ORDER BY TerritoryID, SalesYear;
Berikut set hasilnya.
BusinessEntityID TerritoryID SalesYear SalesYTD MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274 NULL 2005 559,697.56 559,697.56 559,697.56
287 NULL 2006 519,905.93 539,801.75 1,079,603.50
285 NULL 2007 172,524.45 417,375.98 1,252,127.95
283 1 2005 1,573,012.94 1,462,795.04 2,925,590.07
280 1 2005 1,352,577.13 1,462,795.04 2,925,590.07
284 1 2006 1,576,562.20 1,500,717.42 4,502,152.27
275 2 2005 3,763,178.18 3,763,178.18 3,763,178.18
277 3 2005 3,189,418.37 3,189,418.37 3,189,418.37
276 4 2005 4,251,368.55 3,354,952.08 6,709,904.17
281 4 2005 2,458,535.62 3,354,952.08 6,709,904.17
Dalam contoh ini, OVER klausul tidak menyertakan PARTITION BY. Ini berarti bahwa fungsi diterapkan ke semua baris yang dikembalikan oleh kueri. Klausa ORDER BY yang ditentukan dalam OVER klausul menentukan urutan logis tempat SUM fungsi diterapkan. Kueri mengembalikan total kumulatif penjualan berdasarkan tahun untuk semua wilayah penjualan yang ditentukan dalam WHERE klausa. Klausa ORDER BY yang ditentukan dalam SELECT pernyataan menentukan urutan di mana baris kueri ditampilkan.
SELECT BusinessEntityID,
TerritoryID,
DATEPART(yy, ModifiedDate) AS SalesYear,
CONVERT (VARCHAR (20), SalesYTD, 1) AS SalesYTD,
CONVERT (VARCHAR (20), AVG(SalesYTD) OVER (ORDER BY DATEPART(yy, ModifiedDate)), 1) AS MovingAvg,
CONVERT (VARCHAR (20), SUM(SalesYTD) OVER (ORDER BY DATEPART(yy, ModifiedDate)), 1) AS CumulativeTotal
FROM Sales.SalesPerson
WHERE TerritoryID IS NULL
OR TerritoryID < 5
ORDER BY SalesYear;
Berikut set hasilnya.
BusinessEntityID TerritoryID SalesYear SalesYTD MovingAvg CumulativeTotal
---------------- ----------- ----------- -------------------- -------------------- --------------------
274 NULL 2005 559,697.56 2,449,684.05 17,147,788.35
275 2 2005 3,763,178.18 2,449,684.05 17,147,788.35
276 4 2005 4,251,368.55 2,449,684.05 17,147,788.35
277 3 2005 3,189,418.37 2,449,684.05 17,147,788.35
280 1 2005 1,352,577.13 2,449,684.05 17,147,788.35
281 4 2005 2,458,535.62 2,449,684.05 17,147,788.35
283 1 2005 1,573,012.94 2,449,684.05 17,147,788.35
284 1 2006 1,576,562.20 2,138,250.72 19,244,256.47
287 NULL 2006 519,905.93 2,138,250.72 19,244,256.47
285 NULL 2007 172,524.45 1,941,678.09 19,416,780.93
Contoh: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Contoh SUM sederhana
Contoh berikut mengembalikan jumlah total setiap produk yang dijual pada tahun 2003.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Berikut adalah hasil parsial yang ditetapkan.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Menghitung total grup dengan lebih dari satu kolom
Contoh berikut menghitung jumlah dan ListPrice untuk setiap warna yang StandardCostProduct tercantum dalam tabel.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Bagian pertama dari kumpulan hasil ditampilkan dalam hasil berikut:
Color TotalList TotalCost
---------- ------------- --------------
Black 101295.7191 57490.5378
Blue 24082.9484 14772.0524
Grey 125.0000 51.5625
Multi 880.7468 526.4095
NA 3162.3564 1360.6185