MySQL中的条件判断函数,你会用吗?
来自:blog.csdn.net/mu_wind/article/details/93976316
前言
CASE WHEN
、
IF
、
IFNULL
三种函数。
1 CASE WHEN
CASE 字段 WHEN 预期值 THEN 结果1 ELSE 结果2 END
场景:在score表中,sex为1表示男性,sex=0表示女性,查询时转换成汉字显示。
SELECT name,(CASE sex WHEN 0 THEN '女' ELSE '男' END) sex FROM score
2、条件表达式
CASE
WHEN condition THEN result1 ELSE result2
END
SELECT name,score,(CASE
WHEN score>=90 THEN '优秀'
WHEN score>=80 THEN '良好'
WHEN score>=60 THEN '及格'
ELSE '不及格' END) level
FROM score
3、综合使用
score
(sex=1为男,sex=0为女)中,统计有多少个男生和女生以及男女生及格的各有多少个。
SQL:
SELECT
SUM(CASE WHEN sex=0 THEN 1 ELSE 0 END) AS 女生人数,
SUM(CASE WHEN sex=1 THEN 1 ELSE 0 END) AS 男生人数,
SUM(CASE WHEN score>=60 AND sex=0 THEN 1 ELSE 0 END) 男生及格人数,
SUM(CASE WHEN score>=60 AND sex=1 THEN 1 ELSE 0 END) 女生及格人数
FROM score;
再看第2个场景
将上面的score表转换为下面形式:
SQL:
SELECT
name,
MAX(CASE course WHEN '语文' THEN score ELSE 0 END) AS '语文',
max(CASE course WHEN '数学' THEN score ELSE 0 END) AS '数学',
max(CASE course WHEN '英语' THEN score ELSE 0 END) AS '英语',
AVG(score) AS '平均成绩'
FROM score GROUP BY name;
2 IF
IF(expr,result_true,result_false)
使用IF函数:
SELECT name,IF(sex=1,'男','女')sex FROM students;
IF
函数和
CASE WHEN
是有同样效果的,前者相对简单,后者能应对更复杂的判断。
SELECT COUNT(IF(sex=1,1,NULL)) 男生人数,COUNT(IF(sex=0,1,NULL))女生人数 FROM students
3 IFNULL
null
,是非常容易引发一些意外情况的。
因此,我们希望在SQL中做一些处理,如果查询结果是
null
,就转换为特定的值,这就要用到Mysql中
IFNULL
函数。
SELECT price FROM goods WHERE name='light';
IFNULL
改写一下:
SELECT IFNULL(price,0) price FROM goods WHERE name='light';
IFNULL
语句,如果
where
条件中的
name
值是不存在的,那么仍将返回
null
,例如:
-- 返回结果:nullSELECT IFNULL(price,0) price FROM goods WHERE name='aaa';12
-- 返回结果:null
SELECT IFNULL(price,0) price FROM goods WHERE name='aaa';
where
条件的值一定存在,使用前者就可以了,否则要用后者。
IFNULL
函数也可以结合聚合使用,例如:
-- 返回结果:0
SELECT IFNULL(SUM(price),0) FROM goods WHERE status=3;
AVG
、
COUNT
等用同样方式处理,而且,无论
where
条件存在不存在,结果都是会返回0的。