当需要分类的数据大于2种及以上的时候,可以使用IF函数嵌套,也可因使用CASE函数,语句可读性更加好,当然使用IF函数嵌套,语句更加简洁。
CASE函数基本语法:
SELECT
CASE
WHEN <条件表达式> THEN <值>
WHEN <条件表达式> THEN <值>
WHEN <条件表达式> THEN <值>
WHEN <条件表达式> THEN <值>
.....
ELSE <值> ---可选子句
END --结束语句
FROM <表名>
1、CASE函数
实例1:在学生表中,将学生编号小于等于3的学生,分为1班,学生编号在4-6的学生,分为2班,学生编号大于等于7的学生,分为3班,最后显示Sid,Sname,所在班级这三列。
第一种使用IF函数嵌套:
select
Sid as '学生编号',
Sname as '学生姓名',
IF(
Sid <= 3,'1班',
IF(Sid >= 7,'3班','2班')
) as '所在班级'
from students
order by Sid
第二种使用CASE函数:
- CASE函数在结束时一定要是用 END 结束
- WHEN 语句之间不需要使用逗号进行隔开
select
Sid as '学生编号',
Sname as '学生姓名',
CASE
WHEN Sid <= 3 THEN '1班'
WHEN Sid BETWEEN 3 AND 6 THEN '2班'
WHEN Sid >= 7 THEN '3班'
END AS '所在班级'
from students
order by Sid
2、ELSE可选子句
在上面的实例中如果加上ELSE子句,可以这样实现。
select
Sid as '学生编号',
Sname as '学生姓名',
CASE
WHEN Sid <= 3 THEN '1班'
WHEN Sid >= 7 THEN '3班'
ELSE '2班'
END AS '所在班级'
from students
order by Sid
这个实现效果跟上面的结果都是一样的,因为不满足Sid <= 3,Sid >= 7,那肯定是属于ELSE语句中的范围,那么可以直接用ELSE来代替。