如何在SQL分组查询时将空白值和NULL值分为一组

问题背景

出现这个问题的原因是在测试过程中,对于我要分组的类型在不同人存数据时出现了空白值和NULL两种情况(胡闹!),导致我之前的分组查询会出现NULL一个分组,空白值一个分组,由于业务上的需求是没有值的归类为其他(虽然在真实使用时99.99999%不会出现这个null或者空白值乱传问题,但强迫症的我决定重拳出击),为了不改变我的代码整体结构,我决定在SQL上做文章。

废话不多说,先贴解决方案

SELECT
       COUNT (ID) AS fileCount,
	   SUM (file_storage) AS fileStorage,
CASE
COALESCE (file_type, '') //如果是MySQL直接写 file_type即可
WHEN ''                 
THEN'other'             //要将空白值替换成的值  (这里如果不需要替换值也可以使用NULLIF,看清楚是NULLIF)
ELSE COALESCE (file_type, '') //在MySQL中相当于IFNULL
END fileType            //如果字段需要与实体类中对应,可在这里设置,直接写别名就可以哦!
FROM
	cloudoffice.file_virtual_info
//如果需要条件的话,在这里写WHERE啊什么的,自行发挥,跟平时写都一样的	
GROUP BY  
COALESCE (file_type, '')

在这里我对这个SQL进行一下解释说明:
1.COALESCE函数:由于我使用的是Postgre数据库,所以与MySQL存在差异,如果你使用的是MySQL数据库的话,替换成IFNULL函数即可(如果不需要替换值话,也可以使用NULLIF,看仔细是NULLIF);
2.如果你是用的是MySQL数据库的话,在CASE后面可以直接写字段名即可;
3.如果你想给这个字段起别名的话,在END后面添加别名即可;
4.如果在MySQL中出现了如下问题(切记是MYSQL中,我只在MYSQL中出现了该问题);

Expression #2 of SELECT list is not in GROUP BY clause and contains
nonaggregated column ‘xxx’ which is not functionally
dependent on columns in GROUP BY clause; this is incompatible with
sql_mode=only_full_group_by

可以尝试在SQL中运行下方语句重新进行设置(大多数情况下这样做是可以解决的)

set @@global.sql_mode
='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

切记设置之后要重启你的数据库工具!!!
(我并没有过多解释所出现的这个问题(不求甚解嘛嘻嘻),感兴趣的话,可以复制搜索一下我上面贴出的问题(中间那条),有很多文章讲其他解决方案和出现的原因)

  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值