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 的同学都了解或使用过子查询,但是具体它是怎样实现的呢? 查询效率如何? 这些恐怕好多人就不太清楚了,下面咱们就 ...