mysql如何实现字段求和
这篇文章将为大家详细讲解有关mysql如何实现字段求和,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在mysql中,可以利用SUM()函数实现字段求和,该函数返回指定字段值的总和,语法"SELECT SUM(DISTINCT expression) FROM 表名 [WHERE子句];)"。
本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
在mysql中,可以利用SUM()函数实现字段求和。
SUM()
函数用于计算一组值或表达式的总和,可返回指定字段值的总和,SUM()
函数的语法如下:
SUM(DISTINCT expression)
SUM()
函数是如何工作的?
如果在没有返回匹配行
SELECT
语句中使用SUM
函数,则SUM
函数返回NULL
,而不是0
。DISTINCT
运算符允许计算集合中的不同值。SUM
函数忽略计算中的NULL
值。
MySQL SUM()函数示例
我们来看看示例数据库(yiibaidb)中的orderdetails
表。
可以使用SUM()
函数来计算订单编号10100
的总金额,如下查询所示:
SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100;
执行上面查询语句,得到以下结果 -
mysql> SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100;+-----------+| total |+-----------+| 10,223.83 |+-----------+1 row in set
请注意,FORMAT()
函数用于格式化SUM()
函数的返回值。
MySQL SUM与GROUP BY子句
当与GROUP BY
子句组合时,SUM()
函数计算GROUP BY
子句中指定的每个分组的总和。
例如,可以使用具有GROUP BY
子句的SUM
函数计算每个订单的总金额,如下所示:
SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2) totalFROM orderdetailsGROUP BY orderNumberORDER BY SUM(quantityOrdered * priceEach) DESC;
执行上面查询语句,得到以下结果 -
+-------------+-----------+| orderNumber | total |+-------------+-----------+| 10165 | 67,392.85 || 10287 | 61,402.00 || 10310 | 61,234.67 || 10212 | 59,830.55 |*** 此处省略了一大波数据 *****| 10116 | 1,627.56 || 10158 | 1,491.38 || 10144 | 1,128.20 || 10408 | 615.45 |+-------------+-----------+327 rows in set
MySQL SUM与HAVING
您可以使用HAVING
子句中在SUM
函数中来根据特定条件过滤结果。例如,您可以计算总订单量,只能选择总金额大于60000
的订单。如下查询语句 -
SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2)FROM orderdetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000ORDER BY SUM(quantityOrdered * priceEach);
执行上面查询语句,得到以下结果 -
mysql> SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2)FROM orderdetailsGROUP BY orderNumberHAVING SUM(quantityOrdered * priceEach) > 60000ORDER BY SUM(quantityOrdered * priceEach);+-------------+--------------------------------------------+| orderNumber | FORMAT(SUM(quantityOrdered * priceEach),2) |+-------------+--------------------------------------------+| 10310 | 61,234.67 || 10287 | 61,402.00 || 10165 | 67,392.85 |+-------------+--------------------------------------------+3 rows in set
MySQL SUM与LIMIT
假设您想要计算products
表中前十名最昂贵的产品的总和,可以提出以下查询:
SELECT SUM(buyprice)FROM productsORDER BY buyprice DESCLIMIT 10;
执行上面查询语句,得到以下结果 -
mysql> SELECT SUM(buyprice)FROM productsORDER BY buyprice DESCLIMIT 10;+---------------+| SUM(buyprice) |+---------------+| 5983.47 |+---------------+1 row in set
它不起作用,因为具有SUM
函数的SELECT
语句只返回一行,LIMIT
子句约束要返回的行数无效。
要解决此问题,请使用以下子查询:
SELECT FORMAT(SUM(buyprice),2) FROM(SELECT buypriceFROM productsORDER BY buyprice DESCLIMIT 10) price;
执行上面查询语句,得到以下结果 -
+-------------------------+| FORMAT(SUM(buyprice),2) |+-------------------------+| 958.71 |+-------------------------+1 row in set
上面语句是怎么运行的?
子查询选择十大价格最高的产品。
外部查询计算从子查询返回的前
10
个价格最高的产品的总和。
MySQL SUM与NULL
如果没有匹配的行,则SUM
函数返回NULL
值。 有时,您希望SUM
函数返回0
而不是NULL
。 在这种情况下,可以使用COALESCE
函数。COALESCE
函数接受两个参数,如果第一个参数为NULL
,则返回第二个参数,否则返回第一个参数; 参考以下查询语句:
SELECT COALESCE(SUM(quantityOrdered * priceEach),0)FROM orderdetailsWHERE productCode = 'S1_212121';
执行上面查询语句,得到以下结果 -
mysql> SELECT COALESCE(SUM(quantityOrdered * priceEach),0)FROM orderdetailsWHERE productCode = 'S1_212121';+----------------------------------------------+| COALESCE(SUM(quantityOrdered * priceEach),0) |+----------------------------------------------+| 0.00 |+----------------------------------------------+1 row in set
MySQL SUM与连接语句
您可以使用SELECT
JOIN
语句中的SUM
函数根据另一个表中的值指定的条件来计算表中的值的总和。
例如,要计算取消订单金额的总和,请使用以下语句:
SELECT FORMAT(SUM(quantityOrdered * priceEach),2) lossFROM orderdetailsINNER JOIN orders USING(orderNumber)WHERE status = 'Cancelled'
关于"mysql如何实现字段求和"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。