一、常见函数
【对比】
二、示例
1、if 和 ifnull
-- if(value, t, f) 如果value为true,则返回t,否则返回f ok
select if(true, 'ok', 'error');
-- ifnull(value1, value2) 如果value1不为空,返回value1,否则返回value2,为空的意思是null
select ifnull('ok', 'default'); /* ok */
select ifnull('', 'default'); /* ok */
select ifnull(null, 'default'); /* default */
2、case ... when .. then .. else ... end
case [ expr ] when [ val1 ] then [ res1 ] … else [ default ] end
如果expr的值等于val1,返回res1,… 否则返回default默认值
【例】
查询emp表的员工姓名和工作地址(北京/上海 ---> 一线城市, 其他 ---> 二线城市)
step1. 查询emp表的员工姓名和工作地址
select
name,
workaddress
from emp;
step2.工作地址做条件判断和转换 case when ... then ... else ... end
-- case [ expr ] when [ val1 ] then [ res1 ] … else [ default ] end 如果expr的值等于val1,返回res1,… 否则返回default默认值
select
name,
(case workaddress when '北京' then '一线城市' when '上海' then '一线城市' else '二线城市' end) as '工作地址'
from emp;
3、case when .. then .. else ... end
case when [ val1 ] then [ res1 ] … else [ default ] end
如果val1为true,返回res1,… 否则返回default默认值
【例】
统计班级各个学员的成绩,展示规则如下:
>=85,优秀
>=60,及格
否则,不及格
step1.准备学员成绩表
create table score(
id int comment 'id',
name varchar(20) comment '姓名',
math int comment '数学',
english int comment '英语',
chinese int comment '语文'
) comment '学员成绩表';
insert into score (id, name, math, english, chinese)
VALUES (1, 'Tom', 67, 88, 95),
(2, 'Rose', 23, 66, 90),
(3, 'Jack', 56, 98, 76);
step2.筛选判断分数区间 case when
select
id,
name,
(case when math>=85 then '优秀' when math>=60 then '及格' else '不及格' end) as '数学成绩',
(case when english>=85 then '优秀' when english>=60 then '及格' else '不及格' end) as '英语成绩',
(case when chinese>=85 then '优秀' when chinese>=60 then '及格' else '不及格' end) as '语文成绩'
from score;