Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'teki SQL analiz uç noktası
Microsoft Fabric'teki ambar
Microsoft Fabric'teki SQL veritabanı
İfadedeki tüm değerlerin toplamını veya sadece DISTINCT değerleri döndürür.
SUM yalnızca sayısal sütunlarla kullanılabilir. Null değerler göz ardı edilir.
Transact-SQL söz dizimi kuralları
Sözdizimi
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
HEPSİ
Toplama işlevini tüm değerlere uygular.
ALL varsayılan değerdir.
BELİRGİN
Benzersiz değerlerin toplamını döndürdüğünü belirtir SUM .
expression
Bir sabit, sütun veya fonksiyon ve aritmetik, bit bazında ve dizi operatörlerinin herhangi bir kombinasyonu. İfade , bit veri türü hariç, tam sayısal veya yaklaşık sayısal veri tipi kategorisinin bir ifadesidir. Toplama işlevlerine ve alt sorgulara izin verilmez. Daha fazla bilgi için bkz . İfadeler.
OVER ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause yan tümcesi tarafından FROM üretilen sonuç kümesini işlevin uygulandığı bölümlere böler. Belirtilmezse, işlev sorgu sonuç kümesinin tüm satırlarını tek bir grup olarak ele alır.
order_by_clause işlemin gerçekleştirildiği mantıksal sırayı belirler. Daha fazla bilgi için bkz. SELECT - OVER yan tümcesi.
Dönüş türleri
En hassas ifade veri tipindeki tüm ifade değerlerinin toplamını döndürür.
| İfade sonucu | Dönüş türü |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| ondalık kategori (p, s) | ondalık (38, s) |
| para ve küçük para kategorileri | para |
| Float ve gerçek kategori | float |
Açıklamalar
SUMve OVER yan tümceleri olmadan ORDER BY kullanıldığında belirleyici bir işlevdir. ve OVER yan tümceleriyle ORDER BY belirtildiğinde belirsiz değildir. Daha fazla bilgi için bkz. Deterministik ve deterministik olmayan fonksiyonlar.
Ayrıca, SUMfloat ve gerçek veri tipleriyle kullandığınızda belirsiz bir fonksiyon gibi davranıyor gibi görünebilir. Ancak temel sebep, bu veri türlerinin yaklaşık doğasıdır.
Örnekler
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Özet veriyi döndürmek için toplam kullanın
Aşağıdaki örnekler, AdventureWorks2025 veritabanında özet verilerin döndürülmesi için SUM fonksiyonunun kullanıldığını göstermektedir.
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
Sonuç kümesi aşağıdadır.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Over maddesini kullanın
Aşağıdaki örnekSUM, AdventureWorks2025 veritabanındaki tablodaki Sales.SalesPerson her bölge için yıllık satışların kümülatif toplamını sağlamak için madde OVER ile fonksiyonu kullanır. Veri ile TerritoryID bölünür ve mantıksal olarak sıralanır SalesYTD. Bu, SUM işlevinin satış yılına göre her bölge için hesaplandığını gösterir. 1 için TerritoryID , 2005 satış yılı için iki satır vardır ve bu satır o yıl satışa sahip iki satış kişisini temsil eder. Bu iki satırın toplam satış değeri hesaplanır ve ardından 2006 yılı satışlarını temsil eden üçüncü satır hesaplamaya dahil edilir.
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;
Sonuç kümesi aşağıdadır.
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
Bu örnekte, OVER yan tümcesi PARTITION BYiçermez. Bu, işlevin sorgu tarafından döndürülen tüm satırlara uygulandığı anlamına gelir.
ORDER BY yan tümcesinde belirtilen OVER yan tümcesi, SUM işlevinin uygulandığı mantıksal sırayı belirler. Sorgu, maddede WHERE belirtilen tüm satış bölgeleri için yıl bazında toplam satış toplamını döndürür.
ORDER BY deyiminde belirtilen SELECT yan tümcesi, sorgu satırlarının görüntülenme sırasını belirler.
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;
Sonuç kümesi aşağıdadır.
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
Örnekler: Azure Synapse Analytics ve Analytics Platform Sistemi (PDW)
C. Basit bir SUM örneği
Aşağıdaki örnek, 2003 yılında satılan her ürünün toplam sayısını geri getirmektedir.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Kısmi bir sonuç kümesi aşağıdadır.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Birden fazla sütunlu grup toplamlarını hesaplayın
Aşağıdaki örnek, tabloda ListPrice listelenen her renk için ve StandardCost toplamını hesaplarProduct.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Sonuç kümesinin ilk kısmı aşağıdaki sonuçlarda gösterilmiştir:
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