Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Elemzési platformrendszer (PDW)
SQL Analytics-végpont a Microsoft Fabricben
Raktár a Microsoft Fabricben
SQL-adatbázis a Microsoft Fabricben
Az összes érték összegét, vagy csak DISTINCT az értékeket adja vissza az adott kifejezésben.
SUM csak numerikus oszlopokkal használható. A null értékeket figyelmen kívül hagyjuk.
Transact-SQL szintaxis konvenciók
Szemantika
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
ALL
Az összesítő függvény alkalmazása az összes értékre. A ALL az alapértelmezett.
KÜLÖNBÖZŐ
Megadja, hogy SUM az egyedi értékek összegét adja vissza.
kifejezés
Egy állandó, oszlop vagy függvény, valamint bármilyen aritmetikai, bitszerű és string operátorok kombinációja. Az kifejezés a pontos numerikus vagy közelítő numerikus adattípus kategóriájának kifejezése, kivéve a bitadattípust. Az összesítő függvények és al lekérdezések nem engedélyezettek. További információ: Kifejezések.
VÉGE ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause a záradék által FROM létrehozott eredményhalmazt partíciókra osztja, amelyekre a függvényt alkalmazza. Ha nincs megadva, a függvény a lekérdezés eredményhalmazának összes sorát egyetlen csoportként kezeli.
order_by_clause határozza meg a művelet végrehajtásának logikai sorrendjét. További információ: SELECT – OVER záradék.
Visszatérési típusok
Adja vissza az összes kifejezési érték összegét a legpontosabb kifejezési adattípusban.
| Kifejezés eredménye | Visszatérési típus |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Tizedes kategória (P, S) | tizedes (38, s) |
| Pénz és Kispénz kategóriába | pénz |
| Float és reaal kategória | float |
Megjegyzések
SUMdeterminisztikus függvény, ha a záradékok és OVER a ORDER BY záradékok nélkül használják. Nemdeterminisztikus, ha a OVER záradékokkal együtt ORDER BY van megadva. További információ: Determinisztikus és nem determinisztikus függvények.
Emellett SUM úgy tűnhet, hogy nem determinisztikus függvényként viselkedhet, ha float és real adattípusokkal használod. De az alapvető ok ezeknek az adattípusoknak a közelítő jellege.
Példák
A cikkben szereplő kódminták a AdventureWorks2025 vagy AdventureWorksDW2025 mintaadatbázist használják, amelyet a Microsoft SQL Server-minták és közösségi projektek kezdőlapjáról tölthet le.
A. Használd az összeget az összefoglaló adatok visszaküldésére
Az alábbi példák a SUM függvényt használják az összefoglaló adatok visszaküldésére az AdventureWorks2025 adatbázisban.
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
Itt van az eredmények összessége.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Használd az over-záradékot
A következő példa a SUM klauzulával együtt működő függvényt OVER használja, hogy az AdventureWorks2025 adatbázisban szereplő táblázatban minden területre Sales.SalesPerson összesített éves eladási összeget adjon. Az adatokat partícióval TerritoryID osztják és logikusan rendezik .SalesYTD Ez azt jelenti, hogy a SUM függvényt az értékesítési év alapján számítjuk ki az egyes területekre.
TerritoryID Az 1-nél két sor van a 2005-ös értékesítési évre, amelyek az adott évben eladott két értékesítőt jelölik. E két sor összesített eladási értékét kiszámítjuk, majd a 2006-os év harmadik sor is belekerül a számításba.
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;
Itt van az eredmények összessége.
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
Ebben a példában a OVER záradék nem tartalmazza PARTITION BY. Ez azt jelenti, hogy a függvény a lekérdezés által visszaadott összes sorra lesz alkalmazva. A ORDER BY záradékban megadott OVER záradék határozza meg a SUM függvény alkalmazásának logikai sorrendjét. A lekérdezés az összes eladási WHERE terület összes eladási területére vonatkozó összesített eladási területet ad vissza évenként. A ORDER BY utasításban megadott SELECT záradék határozza meg a lekérdezés sorainak megjelenítésének sorrendjét.
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;
Itt van az eredmények összessége.
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
Példák: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Egy egyszerű SUM példa
Az alábbi példa adja vissza az összes eladott termék teljes számát 2003-ban.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Íme egy részleges eredményhalmaz.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Több oszlopos csoportösítmények számítása
A következő példa kiszámítja a ListPrice táblázatban felsorolt színek StandardCost és Product összegét.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Az eredményhalmaz első része az alábbi eredményekben látható:
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