记一次赤裸裸的教训:All elements are null

导读:本篇文章讲解 记一次赤裸裸的教训:All elements are null,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

记一次赤裸裸的教训:All elements are null

wshanshi:记一次赤裸裸的教训…All elements are null…

一、异常信息

数据库查询统计相关业务,未使用分组group by,仅单独使用聚合函数。如下图所示,使用了SUM()函数。

在这里插入图片描述

假如数据库中未匹配到相关数据,结果集用List接收。大家认为返回的结果应该是什么?list.size()会是0?还是1?

楼主第一反应就是:肯定size=0啊!然而,事实证明还是太年轻,结果还真不一定是咱以为的那样!list的size=1,有一条数据,但是数据中的所有值都是null。出现了:All elements are null

把sql运行了一下,发现返回的结果集是这样的。

在这里插入图片描述

运行一下不使用聚合函数的sql语句,如下图所示。

在这里插入图片描述

未查询到数据,且正常返回的为(N/A)这种。

在这里插入图片描述

好家伙,好像明白了什么…

使用sum()函数求和时,会对 null 进行过滤(假如总共10条数据:8条有值,2条无值那种),不进行计算。但是,如果所有值都为null,返回的求和结果也会是null,不会是0。

楼主遇到的这种情况,就是空值进行了sum,就会返回null。

二、解决方法

单独使用聚合函数的时候,一定要注意null值情况。

2.1、方法一、sql中控制

2.1.1、SqlServer数据库

可使用ISNULL(param1,param2)函数进行解决。

ISNULL函数有两个参数,param1表示判断这个参数的值是否为NULL,是NULL返回true,否则返回false。param2表示默认值,param1为空值进行赋值。
效果如下:

2.1.2、MySql数据库

mysql中使用IFNULL()函数,效果同上2.1.1。

2.2、方法二、处理方法中解决

对于查询的结果集,移除所有的null元素

list.removeAll(Collections.singleton(null));

三、类似情况

关联查询有时候也会出现类似情况

尤其是left join、right join时容易出现部分字段空值。若此时,刚好查询出来进行sum的字段都是null,也可能会出现:“All elements are null”这种情况。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115740.html

(0)
Java光头强的头像Java光头强

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!