MySQL SUM

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

MySQL SUM()函数简介

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

SUM(DISTINCT expression)Code language: SQL (Structured Query Language) (sql)

以下是SUM()函数的工作原理:

  • 如果在不返回行的SELECT语句中使用SUM()函数, SUM()函数将返回NULL ,而不是零。
  • DISTINCT选项指示SUM()函数仅计算集合中不同值的总和。
  • SUM()函数忽略计算中的NULL值。

MySQL SUM()函数图解

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

CREATE TABLE sum_demo (
    n INT
);Code language: SQL (Structured Query Language) (sql)

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

INSERT INTO sum_demo(n) 
VALUES(1),(1),(2),(NULL),(3);
Code language: SQL (Structured Query Language) (sql)

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

SELECT 
    SUM(n)
FROM
    sum_demo;Code language: SQL (Structured Query Language) (sql)

正如您所看到的, SUM()函数计算 1、1、2 和 3 的总和。并且它忽略 NULL。

最后,使用带有DISTINCT选项的SUM()来计算第n列中的总值:

SELECT 
    SUM(DISTINCT n)
FROM
    sum_demo;Code language: SQL (Structured Query Language) (sql)

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

MySQL SUM()函数示例

我们来看看示例数据库中的orderdetails表。

orderdetails table

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

此示例使用SUM()函数获取订单详细信息的商品总数:

SELECT 
    SUM(quantityOrdered) SalesQuantity
FROM
    orderdetails;Code language: SQL (Structured Query Language) (sql)

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

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

SELECT 
    orderNumber, 
    quantityOrdered, 
    priceEach
FROM
    orderdetails
WHERE
    orderNumber = 10100;Code language: SQL (Structured Query Language) (sql)

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

SELECT 
	SUM(quantityOrdered * priceEach)  orderTotal
FROM
	orderdetails
WHERE
	orderNumber = 10100;Code language: SQL (Structured Query Language) (sql)

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

quantityOrdered * priceEachCode language: SQL (Structured Query Language) (sql)

3) MySQL SUM()GROUP BY子句示例

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

例如,您可以使用带有GROUP BY子句的SUM()函数来计算每个订单的总金额,如以下查询所示:

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
ORDER BY 
    orderTotal DESC;Code language: SQL (Structured Query Language) (sql)

在这个例子中:

  • GROUP BY子句将订单详细信息分为按订单号分组的组。
  • SUM()函数计算每个订单的每个金额的总和。

4) MySQL SUM()HAVING子句示例

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

SELECT 
    orderNumber, 
    SUM(quantityOrdered * priceEach) orderTotal
FROM
    orderdetails
GROUP BY 
    orderNumber
HAVING 
    SUM(quantityOrdered * priceEach) > 60000
ORDER BY 
    orderTotal;Code language: SQL (Structured Query Language) (sql)

5) MySQL SUM()NULL示例

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

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

请参阅以下查询:

SELECT 
    COALESCE(SUM(quantityOrdered * priceEach), 0) result
FROM
    orderdetails
WHERE
    productCode = 'S1_20';Code language: SQL (Structured Query Language) (sql)

6) MySQL SUM()与连接示例

请参阅以下ordersorderdetails表:

MySQL 事务:订单和 orderDetails 表

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

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

SELECT 
    SUM(quantityOrdered * priceEach) cancelled_amount
FROM
    orderdetails
INNER JOIN orders USING (orderNumber)
WHERE 
    status = 'Cancelled';Code language: SQL (Structured Query Language) (sql)

7) MySQL SUM IF 示例

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

SELECT 
    status, 
    SUM(quantityOrdered)
FROM
    orderdetails
        INNER JOIN
    orders USING (orderNumber)
GROUP BY status;
Code language: SQL (Structured Query Language) (sql)

如果要将行旋转为列,可以将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);
Code language: SQL (Structured Query Language) (sql)

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

本教程有帮助吗?