Mysql使用sum()函数返回null的问题
SUM()函数用于计算一组值或表达式的总和,SUM()函数的语法如下:
SUM(DISTINCT expression)
SUM()函数是如何工作的?
- 如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0。
- DISTINCT运算符允许计算集合中的不同值。
- SUM函数忽略计算中的NULL值。
问题
在项目中使用Mysql中的sum()函数求和时,调试时发现报出下面的错误信息:
sql: Scan error on column index 0, name "total": converting NULL to int64 is unsupported
我相应执行的sql语句如下:
SELECT SUM(consume) as total FROM task_income WHERE consume_type=3 AND uid=20;
验证
为了找到原因,我在Navicat中执行了一遍出问题的sql和参数,发现结果中确实是返回了null:
按我之前开发时的想法:
- 如果有相应的数据,返回求和后的值
- 如果没有符合条件的数据,返回0
结果,当没有符合条件的数据时却返回了null。
解决
可以通过结合使用ISNULL或COALESCE函数来解决。
相应的示例如下:
SELECT IFNULL(SUM(Column1), 0) AS total FROM... SELECT COALESCE(SUM(Column1), 0) AS total FROM...
区别
上面说道,使用ISNULL或COALESCE函数都可以解决为null的问题,那么这两个函数有什么区别呢?
- ISNULL函数接受两个参数,如果第一个参数不是null会直接返回,如果第一个参数是null,则返回第二个参数
- COALESCE函数可以接受两个或多个参数,并返回第一个非null的参数,如果所有参数都为null,则会返回null
参考
- How do I get SUM function in MySQL to return ‘0’ if no values are found? - Stack Overflow
- sql - What is the difference bewteen ifnull and coalesce in mysql? - Stack Overflow
总结
关于Mysql使用sum()函数返回null问题的文章就介绍至此,更多相关Mysql用sum()返回null内容请搜索编程宝库以前的文章,希望以后支持编程宝库!
01前言子查询,通俗解释就是查询语句中嵌套着另一个查询语句。相信日常工作中接触到 MySQL 的同学都了解或使用过子查询,但是具体它是怎样实现的呢? 查询效率如何? 这些恐怕好多人就不太清楚了,下面咱们就 ...