case when的简单用法
case
when 条件1 then 结果1
when 条件2 then 结果2
…
else 结果n
end
ps: 通常用在查询中,满足某个条件,就会输出后面某个结果
-- 查询所有学生的成绩,并将成绩划分为 优秀 良好,及格,不及格 等级
select s.sname, sc.cno,
case
when sc.score>90 then "优秀"
when sc.score>70 then "良好"
when sc.score>60 then "及格"
else "不及格"
end as grade
from student s ,sc where s.sno=sc.sno
-- 使用case when 语句进行数据分组,比如说: 统计不同年龄段的人的数量
select
case
when sage <20 then "20岁以下"
when sage BETWEEN 20 and 30 then "20-30岁"
when sage >30 and sage<50 then "30-50岁"
else "50岁以上的"
END age_group,count(1)
from student group by age_group
-- 使用 case when 进行字符串转换 如果名字为空,返回字符串 "null" 如果不为空,名字脱敏
select
case
when sname is null then "null"
else CONCAT(left(sname,1),'**')
end sname,
sage,ssex from student
-- 在查询的时候进行数学计算, 将20-30岁的人加上10岁 30-50岁的人加上20岁
select
sname,
case
when sage between 20 and 30 then sage+10
when sage between 30 and 50 then sage+20
end new_age,ssex from student
-- 和聚合函数一块使用,统计不同年龄段的人数量
select
count(case when sage BETWEEN 20 and 30 then 1 end) as "20-30",
count(case when sage between 30 and 50 then 1 end) as "30-50"
from student
-- 指定年份到0年的总天数
select TO_DAYS("2-1-1")