Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:SQL Server
Azure SQL-Datenbank
Verwaltete Azure SQL-Instanz
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-Analyseendpunkt in Microsoft Fabric
Lagerhaus in Microsoft Fabric
SQL-Datenbank in Microsoft Fabric
Gibt die Summe aller Werte oder nur die Werte DISTINCT im Ausdruck zurück.
SUM kann nur mit numerischen Spalten verwendet werden. NULL-Werte werden ignoriert.
Transact-SQL-Syntaxkonventionen
Syntax
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Argumente
ALL
Wendet die Aggregatfunktion auf alle Werte an.
ALL ist die Standardeinstellung.
DISTINCT
Spezifiziert, dass SUM die Summe der eindeutigen Werte zurückgegeben wird.
expression
Eine Konstante, Spalte oder Funktion sowie eine beliebige Kombination aus arithmetischen, bitweisen und Zeichenfolgenoperatoren. Bei expression handelt es sich um einen Ausdruck der genauen numerischen oder ungefähren numerischen Datentypkategorie, mit Ausnahme des bit-Datentyps. Aggregatfunktionen und Unterabfragen sind nicht zulässig. Weitere Informationen finden Sie unter Ausdrücke.
ÜBER ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause dividiert das von der FROM Klausel erzeugte Resultset in Partitionen, auf die die Funktion angewendet wird. Wird dies nicht angegeben, verarbeitet die Funktion alle Zeilen des Abfrageresultsets als einzelne Gruppe.
order_by_clause bestimmt die logische Reihenfolge, in der der Vorgang ausgeführt wird. Weitere Informationen finden Sie unter SELECT - OVER-Klausel.
Rückgabetypen
Gibt die Summe aller expression-Werte im genauesten expression-Datentyp zurück.
| Ausdrucksergebnis | Rückgabetyp |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| decimal-Kategorie (p, s) | Dezimal(38, s) |
| money- und smallmoney-Kategorie | money |
| float- und real-Kategorie | float |
Hinweise
SUM ist eine deterministische Funktion, wenn sie ohne die OVER Und-Klauseln ORDER BY verwendet wird. Sie ist nicht deterministisch, wenn sie mit den OVER Und-Klauseln ORDER BY angegeben wird. Weitere Informationen finden Sie unter Deterministische und nicht deterministische Funktionen.
Außerdem könnte es SUM wie eine nichtdeterministische Funktion wirken, wenn man sie mit Float- und realen Datentypen verwendet. Der zugrunde liegende Grund ist jedoch die ungefähre Art dieser Datentypen.
Beispiele
Die Codebeispiele in diesem Artikel verwenden die AdventureWorks2025- oder AdventureWorksDW2025 Beispieldatenbank, die Sie von der Microsoft SQL Server Samples and Community Projects Homepage herunterladen können.
A. Summe verwenden, um Zusammenfassungsdaten zurückzugeben
Die folgenden Beispiele zeigen, wie die SUM-Funktion verwendet wird, um Zusammenfassungsdaten in der AdventureWorks2025-Datenbank zurückzugeben.
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 sehen Sie das Ergebnis.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Verwenden Sie die Über-Klausel
Das folgende Beispiel verwendet die SUM Funktion mit der OVER Klausel, um für jedes Gebiet in der Sales.SalesPerson Tabelle der AdventureWorks2025-Datenbank eine kumulierte Gesamtzahl der Jahresverkäufe bereitzustellen. Die Daten werden nach TerritoryID partitioniert und logisch nach SalesYTD sortiert. Dies bedeutet, dass die SUM Funktion für jedes Gebiet basierend auf dem Umsatzjahr berechnet wird. Für TerritoryID 1 gibt es zwei Zeilen für das Umsatzjahr 2005, die die beiden Vertriebsmitarbeiter mit dem Umsatz in diesem Jahr darstellen. Der kumulierte Gesamtumsatzwert für diese beiden Zeilen wird berechnet, und dann wird die dritte Zeile, die den Umsatz für das Jahr 2006 darstellt, in die Berechnung einbezogen.
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 sehen Sie das Ergebnis.
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 diesem Beispiel enthält OVERdie PARTITION BY Klausel nicht . Dies bedeutet, dass die Funktion auf alle Zeilen angewendet wird, die von der Abfrage zurückgegeben werden. Die ORDER BY in der OVER Klausel angegebene Klausel bestimmt die logische Reihenfolge, auf die die SUM Funktion angewendet wird. Die Abfrage liefert für alle in der Klausel WHERE angegebenen Verkaufsgebiete eine kumulierte Summe der Verkäufe nach Jahr. Die ORDER BY in der SELECT Anweisung angegebene Klausel bestimmt die Reihenfolge, in der die Zeilen der Abfrage angezeigt werden.
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 sehen Sie das Ergebnis.
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
Beispiele: Azure Synapse Analytics und Analytics-Plattformsystem (PDW)
C. Ein einfaches SUM-Beispiel
Im folgenden Beispiel wird die Gesamtanzahl der einzelnen verkauften Produkte im Jahr 2003 zurückgegeben.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Dies ist ein Auszug aus dem Resultset.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D: Berechnen Sie Gruppensummen mit mehr als einer Spalte
Im folgenden Beispiel wird die Summe von ListPrice und StandardCost für jede in der Product-Tabelle aufgeführte Farbe berechnet.
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
Der erste Teil der Ergebnismenge wird in den folgenden Ergebnissen dargestellt:
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