case函数:

是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。

简单case函数:

case 测试表达式
when 简单表达式1 then 结果表达式1
when 简单表达式2 then 结果表达式2..
when 简单表达式3 then 结果表达式n
[else 结果表达式n+1]

例:查询班级表中学生的班号,班名,系号和班主任号,并对系号作如下处理:

系号为1时,显示“计算机系”;系号为2时,显示“软件工程系”;系统为3时,显示“物联网系”

select 班号,班名 case 系号
when 1 then ‘软件工程系’
when 2 then '计算机系'
when 3 then '物联网系'
end as 系号,班主任号
from 班级表

搜索case函数:

case
when 布尔表达式1 then 结果表达式1
when 布尔表达式2 then 结果表达式2...
when 布尔表达式3 then 结构表达式n
[else 结果表达式n+1]
end

例:查询101成绩情况,显示为等级 

select 学号,课程号,
case
when 成绩>=90 then‘优’
when 成绩 between 80 and 90 then'良'
when 成绩 between 70 and 79 then'中'
when 成绩 between 60 and 69 then'及格'
when 成绩<60 then'不及格'
end 成绩
from 成绩表
where 课程号='101';

 例:统计每个班男生和女生的数量各是多少,统计结果的表头为:班号,男生数量,女生数量

select 班号,
count(case when 性别='男' then '男' end)男生数
count(case when 性别='女' then'女' end)女生数
from 学生表 group by 班号;

 例:判断成绩的等级,并统计每一等级的人数。

select 
case 
when grade between 85 and 100 then '优'
when grade between 70 and 84 then'良'
when grade between 60 and 69 then'及格'
else '不及格'
end 等级,count(*)人数
from tb
group by  等级;

 

select case when age<25 or age is null then '25岁以下'
            when age>=25 then '25岁及以上'
            end age_cut,count(*)number
            from user_profile
            group by age_cut
            

 

select device_id,gender,
case 
when age>=25 then '25岁及以上'
when age>=20 then '20-24岁'
when age<20 then '20岁以下'
else '其他'
end as age_cut
from user_profile

 

更多推荐

【MYSQL快速入门】case函数