Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server
Azure SQL Database
Spravovaná instance Azure SQL
Azure Synapse Analytics
Analytics Platform System (PDW)
Koncový bod analýzy SQL v Microsoft Fabric
Sklad v Microsoft Fabric
Databáze SQL v Microsoft Fabric
Vrátí součet všech hodnot, nebo pouze DISTINCT hodnot, ve výrazu.
SUM lze použít pouze s číselnými sloupci. Nulové hodnoty jsou ignorovány.
Syntaxe
-- Aggregate Function Syntax
SUM ( [ ALL | DISTINCT ] expression )
-- Analytic Function Syntax
SUM ( [ ALL ] expression) OVER ( [ partition_by_clause ] [ order_by_clause ] )
Arguments
ALL
Použije agregační funkci na všechny hodnoty.
ALL je výchozí.
ODLIŠNÝ
Specifikuje, že SUM vrací součet unikátních hodnot.
expression
Konstanta, sloupec nebo funkce a libovolná kombinace aritmetických, bitových a řetězcových operátorů. Výraz je výraz pro přesnou číselnou nebo aproximativní kategorii datových typů, s výjimkou datového typu bitu . Agregační funkce a poddotazy nejsou povolené. Další informace naleznete v tématu Výrazy.
KONEC ( [ partition_by_clause ] [ order_by_clause ] )
partition_by_clause rozdělí sadu výsledků vytvořenou FROM klauzulí na oddíly, na které se funkce použije. Pokud není zadáno, funkce zachází se všemi řádky sady výsledků dotazu jako s jednou skupinou.
order_by_clause určuje logické pořadí, ve kterém se operace provádí. Další informace naleznete v tématu SELECT - OVER klauzule.
Návratové typy
Vrací součet všech hodnot výrazu v nejpřesnějším datovém typu výrazu .
| Výsledek výrazu | Návratový typ |
|---|---|
| tinyint | int |
| smallint | int |
| int | int |
| bigint | bigint |
| Desetinná kategorie (P, S) | desetinné (38, s) |
| Kategorie peněz a drobných peněz | peníze |
| Floata reálná kategorie | float |
Poznámky
SUM je deterministická funkce při použití bez OVER klauzulí a ORDER BY klauzulí. Při zadání pomocí OVER klauzulí a ORDER BY klauzulí je nedeterministické. Další informace naleznete v tématu Deterministické a nedeterministické funkce.
Také se může chovat jako nedeterministická funkce, SUM když ji použijete s plovoucími a reálnými datovými typy. Základním důvodem je však přibližná povaha těchto datových typů.
Examples
Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .
A. Použijte součet k vrácení souhrnných dat
Následující příklady ukazují použití funkce SUM pro vrácení souhrnných dat v databázi AdventureWorks2025.
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
Tady je soubor výsledků.
Color
--------------- --------------------- ---------------------
Black 27404.84 5214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
B. Použijte klauzuli o nadání
Následující příklad používá SUM funkci s klauzulí OVER k poskytnutí kumulativního součtu ročních prodejů pro každé území v tabulce Sales.SalesPerson v databázi AdventureWorks2025. Data jsou rozdělena a TerritoryID logicky uspořádána podle SalesYTD. To znamená, že SUM funkce se vypočítá pro každé území na základě prodejního roku. Pro TerritoryID první jsou dva řádky pro prodejní rok 2005, které představují dva prodejce s prodeji v daném roce. Kumulativní celková hodnota prodeje těchto dvou řádků se vypočítá a třetí řádek reprezentující prodeje za rok 2006 je zahrnut do výpočtu.
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;
Tady je soubor výsledků.
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
V tomto příkladu klauzule OVER neobsahuje PARTITION BY. To znamená, že funkce se použije na všechny řádky vrácené dotazem. Klauzule ORDER BY zadaná v klauzuli OVER určuje logické pořadí, ve kterém se použije SUM funkce. Dotaz vrací součet prodejů podle roku pro všechna prodejní území uvedená v klauzuli WHERE . Klauzule ORDER BY zadaná v příkazu SELECT určuje pořadí zobrazení řádků dotazu.
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;
Tady je soubor výsledků.
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říklady: Azure Synapse Analytics a Analytický platformový systém (PDW)
C. Jednoduchý příklad SUM
Následující příklad vrací celkový počet prodaných produktů v roce 2003.
-- Uses AdventureWorks
SELECT ProductKey,
SUM(SalesAmount) AS TotalPerProduct
FROM dbo.FactInternetSales
WHERE OrderDateKey >= '20030101'
AND OrderDateKey < '20040101'
GROUP BY ProductKey
ORDER BY ProductKey;
Tady je částečná sada výsledků.
ProductKey TotalPerProduct
---------- ---------------
214 31421.0200
217 31176.0900
222 29986.4300
225 7956.1500
D. Vypočítejte součty skupin s více než jedním sloupcem
Následující příklad počítá součet ListPrice a StandardCost pro každou barvu uvedenou v tabulce Product .
-- Uses AdventureWorks
SELECT Color,
SUM(ListPrice) AS TotalList,
SUM(StandardCost) AS TotalCost
FROM dbo.DimProduct
GROUP BY Color
ORDER BY Color;
První část množiny výsledků je zobrazena v následujících výsledcích:
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
Související obsah
- agregační funkce
(Transact-SQL) - SELECT - OVER – klauzule (Transact-SQL)