Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL Analytics-eindpunt in Microsoft Fabric
Magazijn in Microsoft Fabric
SQL-database in Microsoft Fabric
Geeft de som van alle waarden, of alleen de DISTINCT waarden, in de expressie terug.
SUM kan alleen met numerieke kolommen worden gebruikt. Nulwaarden worden genegeerd.
Transact-SQL syntaxis-conventies
Syntaxis
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
ALL
Hiermee past u de statistische functie toe op alle waarden.
ALL is de standaardwaarde.
ONDERSCHEIDEND
Specificeert dat SUM de som van unieke waarden teruggeeft.
expressie
Een constante, kolom of functie, en elke combinatie van rekenkundige, bitgewijze en stringoperatoren. expressie is een uitdrukking van de exacte numerieke of benaderende numerieke datatypecategorie, behalve voor het bitdatatype . Statistische functies en subquery's zijn niet toegestaan. Zie Expressies voor meer informatie.
OVER ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause verdeelt de resultatenset die door de FROM component wordt geproduceerd in partities waarop de functie wordt toegepast. Als deze niet is opgegeven, behandelt de functie alle rijen van de queryresultatenset als één groep.
order_by_clause bepaalt de logische volgorde waarin de bewerking wordt uitgevoerd. Zie SELECT - OVER-component voor meer informatie.
Retourtypen
Geeft de som van alle expressiewaarden terug in het meest precieze expressiedatatype .
| Expressieresultaat | Resultaattype |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Decimale categorie (P, S) | Decimaal(38, s) |
| Geld- en kleingeldcategorie | geld |
| float en reële categorie | float |
Opmerkingen
SUM is een deterministische functie wanneer deze wordt gebruikt zonder de OVER en ORDER BY componenten. Het is niet-deterministisch wanneer deze is opgegeven met de OVER en ORDER BY componenten. Zie Deterministische en niet-deterministische functiesvoor meer informatie.
Ook kan het lijken SUM alsof het een niet-deterministische functie is wanneer je het gebruikt met float- en real datatypes. Maar de onderliggende reden is de benaderende aard van deze datatypen.
Voorbeelden
De codevoorbeelden in dit artikel gebruiken de AdventureWorks2025 of AdventureWorksDW2025 voorbeelddatabase die u kunt downloaden van de startpagina van Microsoft SQL Server Samples en Community Projects .
Eén. Gebruik som om samenvattende gegevens terug te geven
De volgende voorbeelden tonen het gebruik van de SUM-functie om samenvattende gegevens terug te geven in de AdventureWorks2025-database.
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
Hier is het resultatenoverzicht.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Gebruik de over-clausule
Het volgende voorbeeld gebruikt de SUM functie met de OVER clausule om een cumulatief totaal van jaarlijkse verkopen voor elk gebied in de Sales.SalesPerson tabel in de AdventureWorks2025-database te geven. De gegevens zijn gepartitioneerd door TerritoryID en logisch geordend door SalesYTD. Dit betekent dat de functie SUM wordt berekend voor elk gebied op basis van het verkoopjaar. Ten TerritoryID eerste zijn er twee rijen voor verkoopjaar 2005 die de twee verkopers met verkopen dat jaar vertegenwoordigen. De cumulatieve totale verkoopwaarde voor deze twee rijen wordt berekend en vervolgens wordt de derde rij die de verkoop voor het jaar 2006 vertegenwoordigt meegenomen in de berekening.
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;
Hier is het resultatenoverzicht.
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
In dit voorbeeld bevat de OVER-component geen PARTITION BY. Dit betekent dat de functie wordt toegepast op alle rijen die door de query worden geretourneerd. De ORDER BY-component die is opgegeven in de OVER-component bepaalt de logische volgorde waarop de SUM functie wordt toegepast. De zoekopdracht levert een cumulatief totaal van de verkopen per jaar op voor alle verkoopgebieden die in de WHERE clausule zijn gespecificeerd. De ORDER BY component die is opgegeven in de instructie SELECT bepaalt de volgorde waarin de rijen van de query worden weergegeven.
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;
Hier is het resultatenoverzicht.
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
Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Een eenvoudig SUM-voorbeeld
Het volgende voorbeeld geeft het totale aantal verkochte producten in het jaar 2003 weer.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Hier volgt een gedeeltelijke resultatenset.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Bereken groepstotalen met meer dan één kolom
Het volgende voorbeeld berekent de som van de ListPrice en StandardCost voor elke kleur die in de Product tabel wordt vermeld.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Het eerste deel van de resultaatset wordt weergegeven in de volgende resultaten:
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