SUM (Transact-SQL)
返回表达式中所有值的和或仅非重复值的和。SUM 只能用于数字列。空值将被忽略。后面可能跟随 OVER 子句。
语法
SUM ( [ ALL | DISTINCT ] expression )
参数
- ALL
对所有的值应用此聚合函数。ALL 是默认值。
- DISTINCT
指定 SUM 返回唯一值的和。
- expression
常量、列或函数与算术、位和字符串运算符的任意组合。expression 是精确数字或近似数字数据类型类别(bit 数据类型除外)的表达式。不允许使用聚合函数和子查询。有关详细信息,请参阅表达式(Transact-SQL)。
返回类型
以最精确的 expression 数据类型返回所有 expression 值的和。
表达式结果 | 返回类型 |
---|---|
整数类别 |
int |
decimal 类别 (p, s) |
decimal(38, s) |
money 和 smallmoney 类别 |
money |
float 和 real 类别 |
float |
重要提示: |
---|
当使用 CUBE 或 ROLLUP 时,不支持非重复聚合,例如 AVG(DISTINCT column_name)、COUNT(DISTINCT column_name)、MAX(DISTINCT column_name)、MIN(DISTINCT column_name) 和 SUM(DISTINCT column_name)。如果使用这类聚合,SQL Server 2005 数据库引擎将返回错误消息并取消查询。 |
示例
A. 在聚合和行聚合中使用 SUM
以下示例显示了聚合函数与行聚合函数之间的区别。第一个示例显示了只提供汇总数据的聚合函数,第二个示例显示了提供详尽数据和汇总数据的行聚合函数。
USE AdventureWorks;
GO
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
下面是结果集:
Color
--------------- --------------------- ---------------------
Black 27404.84 15214.9616
Silver 26462.84 14665.6792
White 19.00 6.7926
(3 row(s) affected)
USE AdventureWorks;
GO
SELECT Color, ListPrice, StandardCost
FROM Production.Product
WHERE Color IS NOT NULL AND ListPrice != 0.00 AND Name LIKE 'Mountain%'
ORDER BY Color
COMPUTE SUM(ListPrice), SUM(StandardCost) BY Color;
GO
下面是结果集:
Color ListPrice StandardCost
--------------- --------------------- ---------------------
Black 2294.99 1251.9813
Black 2294.99 1251.9813
Black 2294.99 1251.9813
Black 1079.99 598.4354
Black 1079.99 598.4354
Black 1079.99 598.4354
Black 1079.99 598.4354
Black 3374.99 1898.0944
Black 3374.99 1898.0944
Black 3374.99 1898.0944
Black 3374.99 1898.0944
Black 539.99 294.5797
Black 539.99 294.5797
Black 539.99 294.5797
Black 539.99 294.5797
Black 539.99 294.5797
sum sum
--------------------- ---------------------
27404.84 15214.9616
Color ListPrice StandardCost
--------------- --------------------- ---------------------
Silver 2319.99 1265.6195
Silver 2319.99 1265.6195
Silver 2319.99 1265.6195
Silver 3399.99 1912.1544
Silver 3399.99 1912.1544
Silver 3399.99 1912.1544
Silver 3399.99 1912.1544
Silver 769.49 419.7784
Silver 769.49 419.7784
Silver 769.49 419.7784
Silver 769.49 419.7784
Silver 564.99 308.2179
Silver 564.99 308.2179
Silver 564.99 308.2179
Silver 564.99 308.2179
Silver 564.99 308.2179
sum sum
--------------------- ---------------------
26462.84 14665.6792
Color ListPrice StandardCost
--------------- --------------------- ---------------------
White 9.50 3.3963
White 9.50 3.3963
sum sum
--------------------- ---------------------
19.00 6.7926
(37 row(s) affected)
B. 计算多列的组合计
以下示例针对 Product
表中列出的每种颜色计算 ListPrice
与 StandardCost
的和。
USE AdventureWorks;
GO
SELECT Color, SUM(ListPrice), SUM(StandardCost)
FROM Production.Product
GROUP BY Color
ORDER BY Color
GO
下面是结果集:
Color
--------------- --------------------- ---------------------
NULL 4182.32 2238.4755
Black 67436.26 38636.5002
Blue 24015.66 14746.1464
Grey 125.00 51.5625
Multi 478.92 272.2542
Red 53274.10 32610.7661
Silver 36563.13 20060.0483
Silver/Black 448.13 198.97
White 36.98 13.5172
Yellow 34527.29 21507.6521
(10 row(s) affected)
请参阅
参考
聚合函数 (Transact-SQL)
OVER 子句 (Transact-SQL)