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日期函数