在编写统计报表时,数据表中频繁出现的 null 值令人困扰。业务代码中需要逐一判断 NULL,再手动转换为 0,过程繁琐且易遗漏。与其在应用层反复处理,不如直接在 SQL 查询中解决——让查询结果直接返回 0,后续的逻辑处理将变得简洁高效。

如何高效解决?MySQL 提供了两个内置函数:IFNULL() 和 COALESCE()。下面逐一介绍它们的用法和适用场景。
1. IFNULL() 函数:将 NULL 转为 0
IFNULL() 的使用最为直接,仅接受两个参数:若第一个参数为 null,则返回第二个参数的值;否则返回第一个参数本身。
select IFNULL(null,0); -- 结果是 0
实际场景: 例如员工表中的工资字段,若为 NULL 则视为 0 进行计算。
select IFNULL(salary,0) from emp
求和运算同样适用,避免整列 NULL 导致汇总结果为 NULL。
select IFNULL(sum(salary),0) from emp
2. COALESCE() 函数:多值备选,灵活处理 NULL
COALESCE() 函数更加灵活,支持传入多个参数。它按顺序从左向右扫描,返回第一个非 null 的值;若所有参数均为 null,则最终返回 null。
select coalesce(null,null,0); -- 结果为 0 select coalesce(null,null,null,0); -- 结果为 0 select coalesce(null,null,null,1,2); -- 结果为 1
典型用法: 例如查询工资低于 JOHN 的员工,当某些员工的工资为 null 时,先将其视为 0 再进行比较。
select ename,salary from emp where coalesce(salary,0) < (select salary from emp where ename ="JOHN");
总结:若只需在两个值中二选一,IFNULL 完全胜任;若存在多个备选值,或需要依次提取首个非空值,COALESCE 更为便捷。根据实际需求选择合适函数,彻底告别 NULL 值判断的繁琐。
