Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analysplattformssystem (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Lager i Microsoft Fabric
SQL-databas i Microsoft Fabric
Returnerar summan av alla värden, eller endast värdena DISTINCT , i uttrycket.
SUM kan endast användas med numeriska kolumner. Nollvärden ignoreras.
Transact-SQL syntaxkonventioner
Syntax
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
ALL
Tillämpar aggregeringsfunktionen på alla värden.
ALL används som standard.
SÄRSKILD
Specificerar att SUM returnerar summan av unika värden.
uttryck
En konstant, kolumn eller funktion, och en kombination av aritmetik, bitvis, och strängoperatorer. uttryck är ett uttryck av den exakta numeriska eller approximativa numeriska datatypkategorin, förutom bitdatatypen . Mängdfunktioner och underfrågor är inte tillåtna. Mer information finns i Uttryck.
ÖVER ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause delar upp resultatuppsättningen FROM som genereras av -satsen i partitioner som funktionen tillämpas på. Om det inte anges behandlar funktionen alla rader i frågeresultatuppsättningen som en enda grupp.
order_by_clause avgör i vilken logisk ordning åtgärden utförs. Mer information finns i SELECT - OVER-satsen.
Returtyper
Returnerar summan av alla uttrycksvärden i den mest precisa uttrycksdatatypen .
| Uttrycksresultat | Returtyp |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Decimalkategori (P, S) | Decimal(38, s) |
| Kategori pengar och småpengar | pengar |
| Flytt och reell kategori | float |
Anmärkningar
SUM är en deterministisk funktion när den OVER används utan - och-satserna ORDER BY . Det är icke-terministiskt när det OVER anges med - och-satserna ORDER BY . Mer information finns i deterministiska och icke-terministiska funktioner.
Det kan också SUM verka som en icke-deterministisk funktion när du använder det med flyttal- och realdatatyper . Men den underliggande orsaken är den ungefärliga naturen hos dessa datatyper.
Examples
Kodexemplen i den här artikeln använder AdventureWorks2025- eller AdventureWorksDW2025-exempeldatabasen, som du kan ladda ned från startsidan Microsoft SQL Server Samples och Community Projects.
A. Använd summan för att returnera sammanfattningsdata
Följande exempel visar hur man använder SUM-funktionen för att returnera sammanfattningsdata i AdventureWorks2025-databasen.
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
Här är resultatet.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Använd översatsen
Följande exempel använder SUM funktionen med klausulen OVER för att ge en kumulativ total årlig försäljning för varje territorium i Sales.SalesPerson tabellen i AdventureWorks2025-databasen. Datan är uppdelad med TerritoryID och logiskt ordnad efter SalesYTD. Det innebär att funktionen SUM beräknas för varje område baserat på försäljningsåret. För TerritoryID det första finns det två rader för försäljningsåret 2005 som representerar de två säljarna med försäljning det året. Det kumulativa totala försäljningsvärdet för dessa två rader beräknas och sedan inkluderas den tredje raden som representerar försäljning för år 2006 i beräkningen.
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;
Här är resultatet.
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
I det här exemplet innehåller OVER-satsen inte PARTITION BY. Det innebär att funktionen tillämpas på alla rader som returneras av frågan. Den ORDER BY-sats som anges i OVER-satsen avgör den logiska ordning som funktionen SUM tillämpas på. Frågan returnerar en kumulativ total försäljning per år för alla försäljningsområden som anges i klausulen WHERE . Den ORDER BY-sats som anges i SELECT-instruktionen avgör i vilken ordning frågans rader visas.
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;
Här är resultatet.
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
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Ett enkelt SUM-exempel
Följande exempel visar det totala antalet sålda produkter år 2003.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Här är en partiell resultatuppsättning.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Beräkna gruppsummor med mer än en kolumn
Följande exempel beräknar summan av ListPrice och StandardCost för varje färg som listas i Product tabellen.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Den första delen av resultatuppsättningen visas i följande resultat:
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