CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
[ELSE default_result]
END
select emp_name as "员工姓名",
case dept_id
when 1 then '行政管理部'
when 2 then '人力资源部'
when 3 then '财务部'
when 4 then '研发部'
when 5 then '销售部'
when 6 then '保卫部'
else '其他部门'
end as "所在部门"
from employee;
员工姓名|所在部门 |
------|--------|
刘备 |行政管理部|
关羽 |行政管理部|
张飞 |行政管理部|
...
邓芝 |销售部 |
简雍 |销售部 |
孙乾 |销售部 |
-- 创建成绩表 t_case,sname 为学生姓名,cname 为课程名称,score 为考试成绩
CREATE TABLE t_case(sname varchar(10), cname varchar(10), score int);
-- 插入测试数据
INSERT INTO t_case(sname, cname, score) VALUES ('张三', '语文', 80);
INSERT INTO t_case(sname, cname, score) VALUES ('李四', '语文', 77);
INSERT INTO t_case(sname, cname, score) VALUES ('王五', '语文', 91);
INSERT INTO t_case(sname, cname, score) VALUES ('张三', '数学', 85);
INSERT INTO t_case(sname, cname, score) VALUES ('李四', '数学', 90);
INSERT INTO t_case(sname, cname, score) VALUES ('王五', '数学', 60);
INSERT INTO t_case(sname, cname, score) VALUES ('张三', '英语', 81);
INSERT INTO t_case(sname, cname, score) VALUES ('李四', '英语', 69);
INSERT INTO t_case(sname, cname, score) VALUES ('王五', '英语', 82);
select *
from t_case;
sname |cname |score|
------|-------|-----|
张三 |语文 | 80|
李四 |语文 | 77|
王五 |语文 | 91|
张三 |数学 | 85|
李四 |数学 | 90|
王五 |数学 | 60|
张三 |英语 | 81|
李四 |英语 | 69|
王五 |英语 | 82|
select sname,
sum(case cname when '语文' then score else 0 end) as "语文",
sum(case cname when '数学' then score else 0 end) as "数学",
sum(case cname when '英语' then score else 0 end) as "英语"
from t_case
group by sname;
sname |语文|数学|英语|
------|---|---|---|
张三 | 80| 85| 81|
李四 | 77| 90| 69|
王五 | 91| 60| 82|
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
[ELSE default_result]
END
select emp_name as "员工姓名",
case
when dept_id = 1 then '行政管理部'
when dept_id = 2 then '人力资源部'
when dept_id = 3 then '财务部'
when dept_id = 4 then '研发部'
when dept_id = 5 then '销售部'
when dept_id = 6 then '保卫部'
else '其他部门'
end as "所在部门"
from employee;
select sname as "学生姓名",
cname as "学科名称",
case
when score >= 90 then '优秀'
when score >= 80 then '良好'
when score >= 70 then '中等'
when score >= 60 then '及格'
else '不及格'
end as "考试成绩"
from t_case;
学生姓名|学科名称|考试成绩|
-------|------|-------|
张三 |语文 |良好 |
李四 |语文 |中等 |
王五 |语文 |优秀 |
张三 |数学 |良好 |
李四 |数学 |优秀 |
王五 |数学 |及格 |
张三 |英语 |良好 |
李四 |英语 |及格 |
王五 |英语 |良好 |
select emp_name,
case emp_name
when '刘备' then 1
when '关羽' then 2
when '张飞' then 3
else 99
end as num
from employee
where dept_id = 1
order by case emp_name
when '刘备' then 1
when '关羽' then 2
when '张飞' then 3
else 99
end;
emp_name|num|
---------|---|
刘备 | 1|
关羽 | 2|
张飞 | 3|
select sname,
sum(if(cname = '语文', score, 0)) as "语文",
sum(if(cname = '数学', score, 0)) as "数学",
sum(if(cname = '英语', score, 0)) as "英语"
from t_case
group by sname;
select emp_name, if(bonus, bonus, 0) as bonus
from employee;
emp_name |bonus |
---------|--------|
刘备 |10000.00|
关羽 |10000.00|
张飞 |10000.00|
...
邓芝 | 0|
简雍 | 0|
孙乾 | 0|
select emp_name, ifnull(bonus, 0) as bonus
from employee;
emp_name |bonus |
---------|--------|
刘备 |10000.00|
关羽 |10000.00|
张飞 |10000.00|
...
邓芝 | 0|
简雍 | 0|
孙乾 | 0|
select coalesce(null, null, 1), coalesce(null, null, null);
coalesce(null, null, 1)|coalesce(null, null, null)|
-----------------------|--------------------------|
1| |
CASE
WHEN expr1 = expr2 THEN NULL
ELSE expr1
END
-- 除零错误
select 1 / 0;
select 1 / nullif(0 , 0);
原文作者:SQL编程思想;如有侵权,请联系管理员删除。