Megosztás a következőn keresztül:


SUM (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példányAzure Synapse AnalyticsElemzési platformrendszer (PDW)SQL Analytics-végpont a Microsoft FabricbenRaktár a Microsoft FabricbenSQL-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