为啥会有这样子的疑问??
来源:后端通过POI读取EXCEL,读取到的内容,直接写入到数据库,从数据库链接工具上查到相关的内容,有点显示为null,有的显示是空白(也就是空字符串 :'')。这导致在后续的操作,比如说group by 会有多余的数据。
id | score | class |
---|---|---|
1 | 59 | 一班 |
2 | 87 | 二班 |
3 | 66 | 二班 |
4 | 61 |
比如这个表格,id=4的这条数据其实是一班的一条记录,但是犹豫一些操作失误导致excel中没有这个数据。
sql: select class,sum(score) from table group by class
class | score |
---|---|
一班 | 59 |
二班 | 153 |
61 |
这样子的话就会,就会多一条数据了。 正文
那这 和 Null 和 空有什么联系?
我们写一个sql
select class,sum(score) from
(select socre,ifnull(class,‘一班’) as class from table)
group by class
那正常来说,这么已处理,空白的记录应该会没,一班的记录也会被sum进去,但是结果还是
class | score |
---|---|
一班 | 59 |
二班 | 153 |
61 |
ifnull大家都知道,如果class是null,那么会被赋值为 一班。但是此处明显class不为null。
那看到这里,大家也都知道了,这个地方是空。
我们再写一个sql
select class,sum(score) from
(select socre,if(class is null or class = '' ,‘一班’,class) as class from table)
group by class
结果:
class | score |
---|---|
一班 | 120 |
二班 | 153 |
经过一个if判断我们就可以去处理这种情况啦。就像java mybatis if里面的写法差不多。
正常来说,我们在数据库中 一班用 ifnull 或者 collesce函数就能够处理这些 null的情况,如果也有空,那么我们就要用if去做判断。想一劳永逸 就if(class is null or class = '' 。。。。
采用这样子的写法就可以了。
(collesce 函数做个介绍,collesce(t1.class,t2.xxx,t3.xxxx,t4.xxxxx,''),比如关联拉了多个表,他会从左边开始,会先非null的值,比如t1.class为null,那么他就会去取t2.xxx,从左开始第一个不为null的值)