В SQL Server, SUM()
агрегатната функция връща сумата от даден израз.
Може да се използва и за връщане на сумата от всички различни (уникални) стойности в израза.
SUM()
работи само с числови колони. Нулевите стойности се игнорират.
Синтаксис
Синтаксисът е така:
SUM ( [ ALL | DISTINCT ] expression )
Може да се използва и с OVER
клауза:
SUM ([ ALL ] expression) OVER ( [ partition_by_clause ] order_by_clause)
Пример
Да предположим, че имаме таблица, наречена Products
със следните данни:
SELECT
VendorId,
ProductName,
ProductPrice
FROM Products;
Резултат:
+-----------+-------------------------------- +----------------+| VendorId | Име на продукта | Цена на продукта ||-----------+--------------------------------+ ----------------|| 1001 | Отвертка с лява ръка | 25,99 || 1001 | Дълго тегло (синьо) | 14,75 || 1001 | Дълго тегло (зелено) | 11,99 || 1002 | Малка чук | 33,49 || 1003 | Верижен трион | 245,00 || 1003 | Кутия за сламени кучета | NULL || 1004 | Чаши за кафе без дъно (4 пакета) | 9,99 || 1001 | Отвертка с дясна ръка | 25,99 |+-----------+--------------------------------+ ----------------+
Можем да използваме следната заявка, за да получим сумата от всички цени.
SELECT SUM(ProductPrice)
FROM Products;
Резултат:
367,20
Тук информацията за цената се съхранява в ProductPrice
колона и затова предаваме това като аргумент на SUM()
функция, която след това изчислява сумата и връща резултата.
Нулеви стойности
SUM()
функцията игнорира нулеви стойности, когато извършва своето изчисление.
Ако колоната съдържа нулеви стойности, може да видите предупреждение, което показва, че нулевите стойности са били елиминирани.
Например, ето предупреждението, което получих при изпълнение на горния пример:
SELECT SUM(ProductPrice)
FROM Products;
Резултат:
+-------------------+| (Без име на колона) ||-------------------|| 367.20 |+--------------------+Предупреждение:Нулевата стойност се елиминира чрез агрегат или друга операция SET.
Филтрирани резултати
SUM()
функцията работи с редовете, върнати от заявката. Така че, ако филтрирате резултатите, резултатът от SUM()
ще отрази това.
SELECT SUM(ProductPrice)
FROM Products
WHERE VendorId = 1001;
Резултат:
78,72
В този случай 78,72 е сумата от всички продукти, предлагани от посочения доставчик.
DISTINCT
Ключова дума
Можете да използвате DISTINCT
ключова дума с SUM()
за изчисляване само на различни стойности. Тоест, ако има дублиращи се стойности, те се третират като една стойност.
Пример:
SELECT
SUM(ALL ProductPrice) AS "All",
SUM(DISTINCT ProductPrice) AS "Distinct"
FROM Products;
Резултат:
<пред>+--------+-----------+| Всички | Различни ||--------+------------|| 367,20 | 341.21 |+--------+-----------+Предупреждение:Нулевата стойност се елиминира чрез агрегат или друга операция SET.
Нашата таблица съдържа два артикула с една и съща цена (отвертката за лява ръка и отвертката за дясна са на цена 25,99). DISTINCT
ключова дума води до това, че и двете стойности се третират като една.
Функции на прозореца
SUM()
функцията може да се използва с OVER
клауза за създаване на прозоречна функция. Вижте SQL SUM()
за начинаещи за пример.