阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

简单探讨sum()函数返回null的问题

76次阅读
没有评论

共计 1102 个字符,预计需要花费 3 分钟才能阅读完成。

导读 MySQL 的 Sum() 函数是用来找出所有记录的一个字段的总和, 下面这篇文章主要给大家介绍了关于 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 问题的文章就介绍到这了

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-25发表,共计1102字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中