SQL SUM 函数

时间:2018-11-15 17:51:56  来源:igfitidea点击:

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

SQL求和函数SUM()介绍

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

SUM(DISTINCT | ALL 数字表达式)

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

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

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

简单的SQL SUM函数示例

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

SELECT 
    SUM(unitsinstock), SUM(unitsonOrder)
FROM
    products;

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

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

SELECT 
    supplierid, SUM(unitsinstock)
FROM
    products
GROUP BY supplierid;

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

带HAVING子句的SQL SUM函数示例

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

SELECT 
    supplierid, SUM(unitsinstock)
FROM
    products
GROUP BY supplierid
HAVING SUM(unitsinstock) < 50;

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

SELECT 
    supplierid, SUM(unitsinstock) totalinstock
FROM
    products
GROUP BY supplierid
HAVING totalinstock < 50;

高级SQL SUM函数示例

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

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个最畅销的产品:

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;