SUM (Transact-SQL)
Возвращает сумму всех, либо только уникальных, значений в выражении. Функция SUM может быть использована только для числовых столбцов. Значения NULL не учитываются. За функцией может следовать Предложение OVER (Transact-SQL).
Синтаксис
SUM ( [ ALL | DISTINCT ] expression )
Аргументы
ALL
Применяет статистическую функцию ко всем значениям. По умолчанию задается параметр ALL.DISTINCT
Указывает, что функция SUM возвращает сумму только уникальных значений.expression
Может быть константой, столбцом или функцией, а также любым сочетанием арифметических, побитовых и строковых операторов. Аргумент expression является выражением относительно точных или приближенных данных любого числового типа, за исключением типа bit. Статистические функции и вложенные запросы не применяются. Дополнительные сведения см. в разделе Выражения (Transact-SQL).
Типы возвращаемых данных
Возвращает сумму всех значений выражения expression, представленную в наиболее точном формате данных, используемом в выражении expression.
Результат выражения |
Тип возвращаемых данных |
---|---|
tinyint |
int |
smallint |
int |
int |
int |
bigint |
bigint |
категория decimal (p, s) |
decimal(38, s) |
категория money и smallmoney. |
money |
категория float и real. |
float |
Примеры
А. Использование 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)
Б. Вычисление общей суммы значений, помещенных в нескольких столбцах
В следующем примере производится вычисление суммы значений столбцов ListPrice и StandardCost для каждого из значений цвета, указанных в таблице Product.
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)