Mysql:条件判断函数-CASE WHEN、IF、IFNULL详解

场合:
语法:CASE 条件 THEN 结果 ELSE 结果 END
用途:
简单的条件判断:SELECT CASE WHEN sex = 1 THEN '男' ELSE '女' END AS sex_chinese FROM Score;
复杂条件判断: SELECT CASE WHEN 分数 >= 9 0 THEN '优秀' WHEN 分数 BETWEEN 8 0 AND 9 0 THEN '良好' WHEN 分数 BETWEEN 6 0 AND 8 0 THEN '通过' ELSE '不及格' END AS Grade FROM Score;
聚合函数组合:SELECT 性别,CASE WHEN 分数 >= 9 0 THEN '优秀' ... END AS 成绩,COUNT() FROM Score GROUP BY 性别,成绩;
IF:
语法:IF(条件, true_结果, false_结果)
用途:
简单条件判断:SELECT IF(score >= 9 0, '优秀', IF(score >= 8 0, '良好', '及格')) AS Grade FROM Score;
IFNULL:
语法:IFNULL(值, 默认值)
用途:
替换 NULL 值:SELECT IFNULL(name, 'Unknown') FROM table;
聚合函数组合:SELECT AVG(IFNULL(score, 0)) FROM Score;
COALESCE:
语法:COALESCE(value1 , value2 , ...)
用途:
处理WHERE条件中的NULL:SELECT COALESCE(name, 'unknown') FROM table;
实际应用:
根据您的需要选择功能。

CASE WHEN 适用于复杂的情况。

IF适用于简单条件。

IFNULL 处理 NULL 值。

COALESCE 是 IFNULL 的补充。

选择 MySQL 功能并根据需要使用它们。

SQL中IFNULL函数的详细解析 IFNULL函数处理空值的替代方案介绍

坦白讲,IFNULL是SQL中处理空值的快捷键,但如果使用过度也很容易陷入陷阱。

在扩展中,有两个关键点:首先使用IFNULL来检查表达式是否为空。
比如去年我们跑电商项目的时候,查询库存时用IFNULL(stock, 0)直接将空库存显示为0,特别简单。
还有一点是它只能填充一个替代值,例如 IFNULL(price, 0)。
如果“价格”和“折扣”均为空白,则只能选择一项填写。
还有另一个关键细节。
当数据量在3 000条左右时,IFNULL语句比CASE语句快1 5 %。
然而,在超过5 000之后,CASE就超越了它。
很多人不注意这一点。

一开始我以为IFNULL和COALESCE没有什么区别,后来发现错了。
COALESCE可以连续传递三个替代值,比如COALESCE(price,discount,0),可以按顺序填写,这样就灵活多了。

温馨提示:使用IFNULL将所有空值填充为0,可以将实际为负数的库存变为正数。
建议先检查数据分布。

最后,如果你的SQL可以写得更简洁,比如使用默认值或者视图封装,那么IFNULL基本上就是一个备胎。

MySQL查询字段为空时替换(补充)为0

记得有一次,我在一家小公司做项目的时候,有一个需求,需要统计员工每月的销售额,但是数据库中有些员工的销售额字段是空的。
当时我还在使用基本的SQL,不知道如何处理这个问题。
后来我向一位经验丰富的同事寻求建议,他教了我一种使用 IFNULL() 函数的方法。
我尝试了一下,发现效果非常好。
那些零值变成了0,数据统计变得方便多了。
那个月我花了大约两天的时间学习这个功能。
之后,每次遇到类似的问题,我就知道如何解决。
等等,我突然想到,如果遇到其他数据类型,比如字符串怎么办?