mysql如何实现字段求和
这篇文章将为大家详细讲解有关mysql如何实现字段求和,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
在mysql中,可以利用SUM()函数实现字段求和,该函数返回指定字段值的总和,语法“SELECT SUM(DISTINCT expression) FROM 表名 [WHERE子句];)”。
本教程操作环境:windows7系统、mysql8版本、Dell G3电脑。
在mysql中,可以利用SUM()函数实现字段求和。
SUM()
函数用于计算一组值或表达式的总和,可返回指定字段值的总和,SUM()
函数的语法如下:
SUM(DISTINCTexpression)
SUM()
函数是如何工作的?
如果在没有返回匹配行SELECT
语句中使用SUM
函数,则SUM
函数返回NULL
,而不是0
。
DISTINCT
运算符允许计算集合中的不同值。
SUM
函数忽略计算中的NULL
值。
我们来看看示例数据库(yiibaidb)中的orderdetails
表。
可以使用SUM()
函数来计算订单编号10100
的总金额,如下查询所示:
SELECTFORMAT(SUM(quantityOrdered*priceEach),2)totalFROMorderdetailsWHEREorderNumber=10100;
执行上面查询语句,得到以下结果 -
mysql>SELECTFORMAT(SUM(quantityOrdered*priceEach),2)totalFROMorderdetailsWHEREorderNumber=10100;+-----------+|total|+-----------+|10,223.83|+-----------+1rowinset
请注意,FORMAT()
函数用于格式化SUM()
函数的返回值。
当与GROUP BY
子句组合时,SUM()
函数计算GROUP BY
子句中指定的每个分组的总和。
例如,可以使用具有GROUP BY
子句的SUM
函数计算每个订单的总金额,如下所示:
SELECTorderNumber,FORMAT(SUM(quantityOrdered*priceEach),2)totalFROMorderdetailsGROUPBYorderNumberORDERBYSUM(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|+-------------+-----------+327rowsinsetMySQL SUM与HAVING
您可以使用HAVING
子句中在SUM
函数中来根据特定条件过滤结果。例如,您可以计算总订单量,只能选择总金额大于60000
的订单。如下查询语句 -
SELECTorderNumber,FORMAT(SUM(quantityOrdered*priceEach),2)FROMorderdetailsGROUPBYorderNumberHAVINGSUM(quantityOrdered*priceEach)>60000ORDERBYSUM(quantityOrdered*priceEach);
执行上面查询语句,得到以下结果 -
mysql>SELECTorderNumber,FORMAT(SUM(quantityOrdered*priceEach),2)FROMorderdetailsGROUPBYorderNumberHAVINGSUM(quantityOrdered*priceEach)>60000ORDERBYSUM(quantityOrdered*priceEach);+-------------+--------------------------------------------+|orderNumber|FORMAT(SUM(quantityOrdered*priceEach),2)|+-------------+--------------------------------------------+|10310|61,234.67||10287|61,402.00||10165|67,392.85|+-------------+--------------------------------------------+3rowsinsetMySQL SUM与LIMIT
假设您想要计算products
表中前十名最昂贵的产品的总和,可以提出以下查询:
SELECTSUM(buyprice)FROMproductsORDERBYbuypriceDESCLIMIT10;
执行上面查询语句,得到以下结果 -
mysql>SELECTSUM(buyprice)FROMproductsORDERBYbuypriceDESCLIMIT10;+---------------+|SUM(buyprice)|+---------------+|5983.47|+---------------+1rowinset
它不起作用,因为具有SUM
函数的SELECT
语句只返回一行,LIMIT
子句约束要返回的行数无效。
要解决此问题,请使用以下子查询:
SELECTFORMAT(SUM(buyprice),2)FROM(SELECTbuypriceFROMproductsORDERBYbuypriceDESCLIMIT10)price;
执行上面查询语句,得到以下结果 -
+-------------------------+|FORMAT(SUM(buyprice),2)|+-------------------------+|958.71|+-------------------------+1rowinset
上面语句是怎么运行的?
子查询选择十大价格最高的产品。
外部查询计算从子查询返回的前10
个价格最高的产品的总和。
如果没有匹配的行,则SUM
函数返回NULL
值。 有时,您希望SUM
函数返回0
而不是NULL
。 在这种情况下,可以使用COALESCE
函数。COALESCE
函数接受两个参数,如果第一个参数为NULL
,则返回第二个参数,否则返回第一个参数; 参考以下查询语句:
SELECTCOALESCE(SUM(quantityOrdered*priceEach),0)FROMorderdetailsWHEREproductCode='S1_212121';
执行上面查询语句,得到以下结果 -
mysql>SELECTCOALESCE(SUM(quantityOrdered*priceEach),0)FROMorderdetailsWHEREproductCode='S1_212121';+----------------------------------------------+|COALESCE(SUM(quantityOrdered*priceEach),0)|+----------------------------------------------+|0.00|+----------------------------------------------+1rowinsetMySQL SUM与连接语句
您可以使用SELECT
JOIN
语句中的SUM
函数根据另一个表中的值指定的条件来计算表中的值的总和。
例如,要计算取消订单金额的总和,请使用以下语句:
SELECTFORMAT(SUM(quantityOrdered*priceEach),2)lossFROMorderdetailsINNERJOINordersUSING(orderNumber)WHEREstatus='Cancelled'
关于“mysql如何实现字段求和”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。