实践一个开发中遇到的问题,采用mysql的avg()求平均数所得结果和期望值不一致问题。
一共5条数据,业务场景意思描述为5个学生数学科目的平均分,即求student表math字段的平均值,如下图
执行sql
select avg(math) from student;
期望值是4000,但是结果是20000,如下图
查了一下sql聚合函数的相关内容,在这篇文章MySQL的聚合函数是否忽略NULL
中找到问题原因,感谢作者
所以在sql上面加判空处理,修改后的sql
select avg(ifnull(math,0)) from student;
得出期望值
PS:如果要保留2位小数的方法可以采用cast函数
select cast(avg(ifnull(math,0)) as DECIMAL(10,2)) from student;