MySQL SUM()函数

时间:2019-11-20 08:52:16  来源:igfitidea点击:

简介:在本教程中,您将学习如何使用MySQL SUM()函数来计算集合中值的总和。

MySQL SUM()函数简介

SUM()函数是一个聚合函数,可让您计算一组值的总和。
SUM()函数的语法如下:

SUM(DISTINCT expression)

这是SUM()函数的工作方式:

  • 如果在不返回任何行的SELECT语句中使用SUM()函数,则SUM()函数将返回NULL,而不是零。

  • DISTINCT选项指示SUM()函数计算集合中仅不同值的总和。

  • SUM()函数将忽略计算中的NULL值。

MySQL SUM()函数图

首先,创建一个名为sum_demo的新表:

CREATE TABLE sum_demo (
    n INT
);

然后,将一些行插入sum_demo表中:

INSERT INTO sum_demo(n) 
VALUES(1),(1),(2),(NULL),(3);

第三,使用SUM()函数来计算n列中的总值:

SELECT 
    SUM(n)
FROM
    sum_demo;

如您所见,SUM()函数计算出1、1、2和3的总数。
它会忽略NULL。

最后,将SUM()与DISTINCT选项一起使用来计算n列中的总值:

SELECT 
    SUM(DISTINCT n)
FROM
    sum_demo;

在这种情况下,具有DISTINCT选项的SUM()仅计算1、2和3的不同值之和。

MySQL SUM()函数示例

让我们看一下示例数据库中的表orderdetails。

1)简单的MySQL SUM()函数示例

本示例使用SUM()函数获取订单明细的总项目数:

SELECT 
    SUM(quantityOrdered) SalesQuantity
FROM
    orderdetails;

2)MySQL SUM()函数与表达式示例

下面显示了订单号10110的订单行项目:

SELECT 
    orderNumber, 
    quantityOrdered, 
    priceEach
FROM
    orderdetails
WHERE
    orderNumber = 10100;

要计算订单号10110的总数,请使用SUM()函数,如下所示:

SELECT 
	SUM(quantityOrdered * priceEach)  orderTotal
FROM
	orderdetails
WHERE
	orderNumber = 10100;

在本教程中,SUM()函数计算订单号10110的所有订单行项目的以下表达式的总和:

quantityOrdered * priceEach

3)带有GROUP BY子句示例的MySQL SUM()

SUM()函数通常与GROUP BY子句一起使用,以计算每个组的总和。

例如,可以通过将SUM()函数与GROUP BY子句一起使用来计算每个订单的总金额,如以下查询所示:

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
ORDER BY 
    orderTotal DESC;

在此示例中:

  • GROUP BY子句将订单详细信息按订单号分组。

  • SUM()函数计算每个订单的每个金额的总和。

4)带有HAVING子句示例的MySQL SUM()

您可以在HAVING子句中使用SUM()函数来过滤组。
本示例说明了如何选择订单金额大于60,000的订单。

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
HAVING 
    SUM(quantityOrdered * priceEach) > 60000
ORDER BY 
    orderTotal;

5)MySQL SUM()与NULL示例

如果结果集为空,则SUM()函数将返回NULL。
有时,您可能希望SUM()函数返回零而不是NULL。

在这种情况下,您可以使用COALESCE()函数。
COALESCE函数接受两个参数,如果第一个参数为NULL,则返回第二个参数。
否则,它返回第一个参数。

请参阅以下查询:

SELECT 
    COALESCE(SUM(quantityOrdered * priceEach), 0) result
FROM
    orderdetails
WHERE
    productCode = 'S1_20';

6)MySQL SUM()与连接示例

请参阅以下订单和orderdetails表:

您可以在SELECT with JOIN子句中使用SUM()函数,根据另一个表中的值指定的条件来计算表中的值之和。

该语句使用SUM()函数来计算已取消订单的总金额:

SELECT 
    SUM(quantityOrdered * priceEach) cancelled_amount
FROM
    orderdetails
INNER JOIN orders USING (orderNumber)
WHERE 
    status = 'Cancelled';

7)MySQL SUM IF示例

以下语句使用SUM()函数来计算每种订单状态的已售商品数量:

SELECT 
    status, 
    SUM(quantityOrdered)
FROM
    orderdetails
        INNER JOIN
    orders USING (orderNumber)
GROUP BY status;

如果要将行旋转到列,可以将SUM()函数与CASE表达式一起使用。
这是一种SUMIF逻辑:

SELECT 
    SUM(CASE
        WHEN status = 'Shipped' THEN quantityOrdered
    END) qty_shipped,
    SUM(CASE
        WHEN status = 'Resolved' THEN quantityOrdered
    END) qty_resolved,
    SUM(CASE
        WHEN status = 'Cancelled' THEN quantityOrdered
    END) qty_cancelled,
    SUM(CASE
        WHEN status = 'On Hold' THEN quantityOrdered
    END) qty_on_hold,
    SUM(CASE
        WHEN status = 'Disputed' THEN quantityOrdered
    END) qty_on_disputed,
    SUM(CASE
        WHEN status = 'In Process' THEN quantityOrdered
    END) qty_in_process
FROM
    orderdetails
        INNER JOIN
    orders USING (orderNumber);

在本教程中,您学习了如何使用MySQL SUM()函数来计算一组值的总和。