MySQL SUM()函数
简介:在本教程中,您将学习如何使用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()函数来计算一组值的总和。