Mysql 通过 case when 解决聚合函数忽略null的情况

网上找了很久才找到的一个解决方案,将这个方案转载出来供大家参考,下面以sum函数为例

建表、数据

CREATE TABLE `student` (
  `name` varchar(10) DEFAULT NULL COMMENT '姓名',
  `sex` varchar(1) DEFAULT NULL COMMENT '性别',
  `id` varchar(2) DEFAULT NULL COMMENT '主键'
  PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;

INSERT INTO `eye`.`student` (`name`, `sex`, `age`) VALUES ('顾二嫂', '女', '30');
INSERT INTO `eye`.`student` (`name`, `sex`, `age`) VALUES ('宋江', '男', '48');
INSERT INTO `eye`.`student` (`name`, `sex`, `age`) VALUES ('林冲', '男', '35');
INSERT INTO `eye`.`student` (`name`, `sex`, `age`) VALUES ('娇娘', '女', NULL);

在这里插入图片描述
mysql默认的sum函数处理结果

SELECT
	sex AS '性别',
	sum( age ) AS '总年龄' 
FROM
	student 
GROUP BY
	sex

在这里插入图片描述
以下是没有忽略null的处理方案(对于值为null的情况,sum函数会把当前值当0处理,那么我们只要让为null的值大于0即可)

SELECT
	sex AS '性别',
	( CASE WHEN sum( IFNULL( age, 1 )) > sum( age ) THEN NULL ELSE sum( age ) END ) AS '总年龄' 
FROM
	student 
GROUP BY
	sex

在这里插入图片描述
转载于:https://my.oschina.net/u/3536632/blog/3074268

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值