MySQL NULL 运算陷阱|员工基本工资 + 提成平均值正确写法
项目场景在日常工作中我们常常会遇到对员工的薪水进行计算和查看处理但是我们会遇到这样一个问题“一个员工的工资包括基本工资和提成提成只有部分员工有有些员工没有提成”题目案例查询每个部门编号、部门名称以及部门员工人数、平均工资基本工资提成只显示有员工的部门。问题描述错误的思考想要算平均工资那我么可以直接avg基本工资提成就可以完成于是SELECTd.DEPTNO,d.DNAME,count(e.empno)员工人数,AVG(e.SALe.COMM)平均薪资FROMdept dINNERJOINemp eONe.DEPTNOd.DEPTNOGROUPBYd.DEPTNO,d.DNAME;结果却发现这个结果是错误的原因分析想要算出总共工资的时候会遇到一个问题就是如果sumsalcomm时当其中一个数是null时 计算出来的结果就是null解决方案所以我们需要用的ifnull这个流程控制函数使用这个函数之后我们的代码就是SELECTd.DEPTNO,d.DNAME,count(e.empno)员工人数,AVG(IFNULL(e.SALe.COMM,e.SAL))平均薪资FROMdept dINNERJOINemp eONe.DEPTNOd.DEPTNOGROUPBYd.DEPTNO,d.DNAME;代码解释ifnullsalcommsal它的意思是当salcomm为null时将返回sal如果返回sal说明salcomm为空那么sal和comm其中必定有一个是null题目已给出时comm为null 故当前者不是null时那么sal和comm都有值 返回他们的和如果是null那么久返回sal。结果展示