SQL Server Sum()函數

在本教學中,將學習如何使用SQL Server SUM()函數來計算值的總和。

SQL Server SUM()函數是一個聚合函數,用於計算運算式中所有或不同值的總和。

SUM()函數的語法如下:

SUM([ALL | DISTINCT ] expression)

在這個語法中:

  • ALL指示SUM()函數返回包括重複項在內的所有值的總和。默認情況下使用ALL
  • DISTINCT指示SUM()函數計算唯一不同值的總和。
  • expression是返回精確或近似數值的任何有效運算式。請注意,運算式中不接受聚合函數或子查詢。

注意:SUM()函數忽略NULL值。

ALL與DISTINCT比較

下麵將創建一個新表來演示ALLDISTINCT之間的區別:

CREATE TABLE t(
    val INT
);

INSERT INTO t(val)
VALUES(1),(2),(3),(3),(4),(NULL),(5);

SELECT
    val
FROM
    t;

執行上面查詢語句,得到以下結果:

創建並查詢表

以下語句返回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)

SQL Server SUM()函數示例

下麵來看一些使用SUM()函數的例子。

1. SQL Server SUM()函數簡單的示例

以下語句返回所有倉庫中所有商品的總庫存:

SELECT
    SUM(quantity) total_stocks
FROM
    production.stocks;

以下顯示輸出:

total_stocks
------------
13511

(1 row affected)

1. SQL Server SUM()函數帶有GROUP BY示例

以下語句按商店ID查找總庫存:

SELECT
    store_id,
    SUM(quantity) store_stocks
FROM
    production.stocks
GROUP BY
    store_id;

執行上面查詢語句,得到以下結果:
每個商店庫存量

在這個例子中:

  • 首先,GROUP BY子句按商店ID將庫存劃分為組。
  • 其次,SUM()函數應用於每個分組以計算每個組的總庫存。

如果要顯示商店名稱而不是商店ID,可以使用以下語句:

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;

執行上面查詢語句,得到以下結果:

Sum()函數

3. SQL Server 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;

執行上面查詢語句,得到以下結果:

4. SQL Server 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;

執行上面查詢語句,得到以下結果:

在本教學中,學習了如何使用SQL Server SUM()函數來計算值的總和。


上一篇: SQL Server聚合函數 下一篇: SQL Server日期函數