SQL SUM 函数


在本教程中,我们将学习如何使用SQL SUM函数计算所有值或不同值的和。

SQL求和函数SUM()介绍

SUM函数返回数字和。它的语法如下:

1
SUM(DISTINCT | ALL 数字表达式)

与其他SQL聚合函数不同,SUM()函数只接受计算后为数值的表达式。

你可以在SUM函数中指定ALL或DISTINCT修饰符。其中:

  • DISTINCT修饰符指示SUM()函数计算不同值的总和,这意味着将消除重复项。
  • ALL修饰符允许SUM()函数返回包括重复项在内的所有值的和。如果未显式指定任何修饰符,则默认情况下SUM()函数使用ALL修饰符。

简单的SQL SUM函数示例

要获得库存数量和订购数量的总和,可以使用SUM()函数,如下所示:

1
2
3
4
SELECT
SUM(unitsinstock), SUM(unitsonOrder)
FROM
products;

带有GROUP BY子句的SQL SUM函数示例

要获取每个供应商库存数量的总和,可以将SUM()函数与GROUP BY子句一起使用:

1
2
3
4
5
SELECT
supplierid, SUM(unitsinstock)
FROM
products
GROUP BY supplierid;

GROUP BY子句将按供应商对产品进行分组。对于每个组,SUM()函数计算库存数量的和。

带HAVING子句的SQL SUM函数示例

要获取库存单位总数小于50的供应商,需要将sum()函数与GROUP by和HAVING子句一起使用,如下所示:

1
2
3
4
5
6
SELECT
supplierid, SUM(unitsinstock)
FROM
products
GROUP BY supplierid
HAVING SUM(unitsinstock) < 50;

我们可以对SUM表达式使用别名,下面的语句作用是一样的:

1
2
3
4
5
6
SELECT
supplierid, SUM(unitsinstock) totalinstock
FROM
products
GROUP BY supplierid
HAVING totalinstock < 50;

高级SQL SUM函数示例

我们还可以使用SUM函数处理更具挑战性的业务问题,比如按销售额获取前5名客户,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT
customers.customerid,
companyname,
(SUM(unitprice * quantity) - SUM(unitprice * quantity) * discount) AS total
FROM
orderdetails
INNER JOIN
orders_test ON orders_test.orderid = orderdetails.orderid
INNER JOIN
customers ON customers.customerid = orders_test.customerid
GROUP BY customers.customerid
ORDER BY total DESC
LIMIT 5

下面的查询使用SUM()函数得到5个最畅销的产品:

1
2
3
4
5
6
7
8
9
10
11
SELECT
p.productid,
p.productname,
(SUM(o.unitprice * quantity) - SUM(o.unitprice * quantity) * discount) total
FROM
orderdetails o
INNER JOIN
products p ON p.productid = o.productid
GROUP BY p.productid
ORDER BY total DESC
LIMIT 5;


原文链接:https://codingdict.com/