В этом руководстве вы узнаете, как использовать функцию SQL Server SUM() для вычисления суммы значений.
- Введение в функцию SUM() SQL Server
- ВСЕ против ОТДЕЛЬНЫХ
- Примеры функции SUM() SQL Server
- 1) Пример базовой функции SQL Server SUM()
- 2) Использование функции SUM() с примером GROUP BY
- 3) Пример использования функции SUM() с предложением HAVING
- 4) Использование функции SUM() с примером выражения
- Краткое содержание
Введение в функцию SUM() SQL Server
Функция SUM() SQL Server — это агрегатная функция, которая вычисляет сумму всех или отдельных значений в выражении.
Вот синтаксис функции SUM():
SUM([ALL | DISTINCT ] expression)
В этом синтаксисе:
- ALL указывает функции SUM() возвращать сумму всех значений, включая дубликаты. ALL используется по умолчанию.
- DISTINCT указывает функции SUM() вычислить сумму единственных различных значений.
- выражение — это любое допустимое выражение, возвращающее точное или приблизительное числовое значение. Обратите внимание, что агрегатные функции или подзапросы не принимаются в выражении.
Функция SUM() игнорирует значения NULL.
ВСЕ против ОТДЕЛЬНЫХ
Давайте создадим новую таблицу, чтобы продемонстрировать разницу между параметрами ALL и DISTINCT:
CREATE TABLE t(
val INT
);
INSERT INTO t(val)
VALUES(1),(2),(3),(3),(4),(NULL),(5);
SELECT
val
FROM
t;
Выход:
val ----------- 1 2 3 3 4 NULL 5 (7 rows affected)
Следующий оператор использует функцию SUM() для вычисления суммы всех значений в столбце val:
SELECT
SUM(val) total
FROM
t;
Выход:
total ----------- 18 Warning: Null value is eliminated by an aggregate or other SET operation. (1 row affected)
Однако при использовании модификатора DISTINCT функция SUM() возвращает сумму уникальных значений в столбце val:
SELECT
SUM(DISTINCT val) total
FROM
t;
Выход:
total ----------- 15 Warning: Null value is eliminated by an aggregate or other SET operation. (1 row affected)
Примеры функции SUM() SQL Server
Давайте рассмотрим несколько практических примеров использования функции SUM(). Для демонстрации мы будем использовать таблицы из примера базы данных.
1) Пример базовой функции SQL Server SUM()
В следующем операторе функция SUM() используется для расчета общих запасов всех товаров во всех магазинах:
SELECT
SUM(quantity) total_stocks
FROM
production.stocks;
Выход:
total_stocks ------------ 13511 (1 row affected)
2) Использование функции SUM() с примером GROUP BY
В следующем операторе используется функция SUM() с предложением GROUP BY для поиска общего количества запасов по идентификатору магазина:
SELECT
store_id,
SUM(quantity) store_stocks
FROM
production.stocks
GROUP BY
store_id;
Вот что получилось:
store_id | store_stocks ---------+------------ 1 | 4532 2 | 4359 3 | 4620 (3 rows)
В этом примере:
- Во-первых, предложение GROUP BY разделило запасы по идентификатору магазина на группы.
- Во-вторых, функция SUM() применяется к каждой группе для расчета общих запасов для каждой группы.
Если вы хотите отобразить название магазина вместо идентификатора магазина, вы можете использовать следующий оператор:
SELECT
store_name,
SUM(quantity) store_stocks
FROM
production.stocks w
INNER JOIN sales.stores s
ON s.store_id = w.store_id
GROUP BY
store_name;
Выход:
store_name | store_stocks -----------------+------------ Baldwin Bikes | 4359 Rowlett Bikes | 4620 Santa Cruz Bikes | 4532 (3 rows)
3) Пример использования функции SUM() с предложением HAVING
В следующем операторе используется функция SUM() в предложении HAVING для поиска запасов каждого продукта и возврата только тех продуктов, запасы которых превышают 100:
SELECT
product_name,
SUM(quantity) total_stocks
FROM
production.stocks s
INNER JOIN production.products p
ON p.product_id = s.product_id
GROUP BY
product_name
HAVING
SUM(quantity) > 100
ORDER BY
total_stocks DESC;
Выход:
product_name | total_stocks ------------------------------------------------------+-------------- Electra Townie Original 7D - 2017 | 125 Electra Townie Balloon 8D EQ Ladies' - 2016/2017/2018 | 121 Electra Townie Go! 8i - 2017/2018 | 120 Electra Townie Commute 8D - 2018 | 119 Sun Bicycles Cruz 7 - 2017 | 115 Surly Straggler - 2018 | 109 Sun Bicycles Cruz 3 - 2017 | 109 Electra Townie Original 21D - 2018 | 109 Electra Girl's Hawaii 1 16" - 2017 | 107 (9 rows)\
4) Использование функции SUM() с примером выражения
В следующем примере выражение в функции SUM() используется для расчета чистой стоимости каждого заказа на продажу:
SELECT
order_id,
SUM(
quantity * list_price *(1 - discount)
) net_value
FROM
sales.order_items
GROUP BY
order_id
ORDER BY
net_value DESC;
Выход:
order_id | net_value ---------+------------ 1541 | 29147.0264 937 | 27050.7182 1506 | 25574.9555 1482 | 25365.4344 ...
Краткое содержание
- Используйте функцию SUM() для вычисления суммы значений.
- Используйте опцию DISTINCT для расчета суммы различных значений.
- Используйте опцию ALL для расчета суммы всех значений, включая дубликаты.


