Bagikan melalui


SUM (Transact-SQL)

Berlaku untuk:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft Fabric

Mengembalikan jumlah semua nilai, atau hanya nilai DISTINCT, dalam ekspresi. SUM hanya dapat digunakan dengan kolom numerik. Nilai null diabaikan.

Konvensi sintaks transact-SQL

Sintaksis

-- Aggregate Function Syntax    
SUM ( [ ALL | DISTINCT ] expression )  

-- Analytic Function Syntax   
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)  

Catatan

Untuk melihat sintaks Transact-SQL untuk SQL Server 2014 (12.x) dan versi yang lebih lama, lihat Dokumentasi versi sebelumnya.

Argumen

SEMUA
Menerapkan fungsi agregat ke semua nilai. ALL adalah default.

NYATA
Menentukan bahwa SUM mengembalikan jumlah nilai unik.

expression
Adalah 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 (Transact-SQL).

OVER ( [ partition_by_clause ] order_by_clause)
partition_by_clause membagi tataan hasil yang dihasilkan oleh klausul FROM 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. order_by_clause diperlukan. Untuk informasi selengkapnya, lihat Klausul OVER (Transact-SQL).

Jenis Kembalian

Mengembalikan penjumlahan semua nilai ekspresi dalam jenis data ekspresi yang paling tepat.

Hasil ekspresi Jenis Pengembalian
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 saat digunakan tanpa klausa OVER dan ORDER BY. Ini tidak deterministik ketika ditentukan dengan klausul OVER dan ORDER BY. Untuk informasi selengkapnya, lihat Fungsi Deterministik dan Nondeterministik.

Contoh

J. Menggunakan SUM untuk mengembalikan data ringkasan

Contoh berikut menunjukkan penggunaan fungsi SUM untuk mengembalikan data ringkasan dalam database AdventureWorks2022.

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 adalah hasil yang ditetapkan.

Color
--------------- --------------------- ---------------------
Black           27404.84              5214.9616
Silver          26462.84              14665.6792
White           19.00                 6.7926

(3 row(s) affected)

B. Menggunakan klausa OVER

Contoh berikut menggunakan fungsi SUM dengan klausul OVER untuk memberikan total kumulatif penjualan tahunan untuk setiap wilayah dalam Sales.SalesPerson tabel dalam database AdventureWorks2022. Data dipartisi oleh TerritoryID dan secara logis diurutkan oleh SalesYTD. Ini berarti bahwa fungsi SUM dihitung untuk setiap wilayah berdasarkan tahun penjualan. Perhatikan bahwa untuk TerritoryID 1, ada dua baris untuk penjualan tahun 2005 mewakili dua orang penjualan dengan penjualan tahun itu. 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 adalah hasil yang ditetapkan.

  
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  
  
(10 row(s) affected)  
  

Dalam contoh ini, klausa OVER tidak menyertakan PARTITION BY. Ini berarti bahwa fungsi akan diterapkan ke semua baris yang dikembalikan oleh kueri. Klausa ORDER BY yang ditentukan dalam klausul OVER menentukan urutan logis tempat fungsi SUM diterapkan. Kueri mengembalikan total kumulatif penjualan menurut tahun untuk semua wilayah penjualan yang ditentukan dalam klausul WHERE. Klausa ORDER BY yang ditentukan dalam pernyataan SELECT 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 adalah hasil yang ditetapkan.

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  
(10 row(s) affected)  

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 kumpulan hasil parsial.

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 StandardCost untuk setiap warna yang ListPriceProduct 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 ditunjukkan di bawah ini:

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

Lihat Juga

Fungsi Agregat (T-SQL)
Klausul OVER (Transact-SQL)