昨天专门找了很多资料,想解决sum() 结果中带有null的问题,但昨晚最后一些列的测试发现另外的问题;
表结构如下所示,id是int类型,name是varchar类型的,pct是float类型的
SELECT `name`,sum(pct) FROM `test` GROUP BY `name`;
SELECT `id`,sum(pct) FROM `test` GROUP BY `id`;
按如上的两个语句执行,结果如下所示
注意看下第二行的 sum值,第一个结果是0.9354,第二个结果是0.8098,而第二个结果才是正确的,第一个和第二个的区别就是group by 的字段不一样,一个是varchar类型的汉字,一个是int类型的数字id,然后这就造成了最终的结果不一样;
本身简单的sum() 会自动过滤掉null值不参与计算的,但是在sum()的同时加上group by的时候,就出现问题了
这种sum()结果中有null的数据,通过简单的ifnull()确实可以规避这种问题,但是不停的测试了几轮后发现,这个竟然是mysql8.0版本的bug,在5.7版本上复现不了这个问题,看看mysql啥时候能修复这个bug了,哎,所有的程序都要重新检查一遍了。大家也注意下吧。