SUM (Transact-SQL)
Возвращает сумму всех, либо только уникальных, значений в выражении. Функция SUM может быть использована только для числовых столбцов. Значения NULL пропускаются. За функцией может следовать предложение OVER.
Синтаксические обозначения в Transact-SQL
- ALL
-
Применяет статистическую функцию ко всем значениям. По умолчанию, задается параметр ALL.
- DISTINCT
-
Указывает, что функция SUM возвращает сумму только уникальных значений.
- expression
-
Может быть константой, столбцом или функцией, а также любым сочетанием арифметических, побитовых и строковых операторов. Аргумент expression является выражением относительно точных или приближенных данных любого числового типа, за исключением типа bit. Статистические функции и вложенные запросы не применяются. Дополнительные сведения см. в разделе Выражения (Transact-SQL).
Возвращает сумму всех значений выражения expression, представленную в наиболее точном формате данных, используемом в выражении expression.
| Результат выражения | Тип возвращаемых данных |
|---|---|
|
категория целых чисел (integer) |
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 Database Engine возвращается ошибка и запрос прерывается. |
А. Использование 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)
Справочник
Статистические функции (Transact-SQL)Предложение OVER (Transact-SQL)
