
持续关注慧测,每天进步一点!
讲师:张老师
本期语音讲解
各位测试界小伙伴们:
大家好,我是慧测的张老师,
欢迎大家参加慧测的2019年系列微课程活动。
本套课程主要分为两部分内容:
《每期一道名企面试题分析》
《每期5分钟测试开发小课堂》
目的是让大家利用好碎片化时间,每天积累一点技术。
今天是我们《每期一道名企面试题分析》微课程的内容。
题目
数据库查询case…when
成绩表
姓名(NAME) 科目(SUBJECT) 成绩(GRADE)
张三 语文 87
李四 语文 73
张三 数学 20
李四 数学 Null
… … …
使用SQL,查询所有学生的语文成绩等级,成绩为空的,显示 0.
A:90-100
B:75-89
C:60-74
D:0-60
这道题目给了一个成绩表,有三个字段:姓名、科目和成绩,要求查询所有学生的语文成绩等级,显示成A、B、C、D、0的形式,A、B、C、D分别代表不同的成绩区间,0代表成绩为空。
这道题目之所以有难度,是因为它涉及到的知识点是我们不太熟悉,但在数据统计时经常要用到的一个语句——Case语句,用来对查询结果按条件进行转换。
该语句有两种格式。
第一种格式为:
以CASE + 表达式开头,以END结束,CASE与END间有若干对WHEN…THEN..的组合。
CASE expression
WHEN expression_11 THEN expression_12
…
WHEN expression_n1 THEN expression_n2
[ELSE expression_m]
END
该语句的执行过程是:
将CASE后面表达式的值与各个WHEN子句中的表达式的值进行比较,如果两者相等,则返回THEN后的表达式的值,然后跳出CASE语句,否则返回ELSE子句中的表达式的值。ELSE子句是可选项。
当CASE语句中不包含ELSE子句时,如果所有比较失败时,CASE语句将返回NULL。
举个例子,从学生表a_studentinfo中查询学生的姓名(sname)和性别(sex),表中存储的性别数据为男、女,但要求在结果中显示成M、F,语句如下:
select sname 姓名, (case sex
when '男' then 'M'
when '女' then 'F'
else 'UNKOWN'
END) 性别
from a_studentinfo;
语法形式2:
以CASE开头,CASE后面不加表达式,以END结束,CASE与END间有若干对WHEN…THEN..的组合。
CASE WHEN condition_expression_1 THEN expression_1
…
WHEN condition_expression_n THEN expression_n
[ELSE expression_m]
END
该语句的执行过程是:首先测试WHEN后的条件表达式的值,如果其值为真,则返回THEN后面的表达式的值,否则测试下一个WHEN子句中的表达式的值,如果所有WHEN子句后的表达式的值都为假,则返回ELSE后的表达式的值,如果在CASE语句中没有ELSE子句,则CASE表达式返回NULL。
举个例子,从学生-课程表a_studentcourse中查询学号(sno)、课程号(cno)和成绩,表中存储的成绩数据为分数,但要求在查询结果中显示成不同的等级,语句如下:
select sno 学号, cno 课程号, (case when score between 90 and 100 then '优秀'
when score between 75 and 89 then '良好'
when score between 60 and 74 then '及格'
when score < 60 then '不及格'
else '缺考'
end) as 等级
from a_studentcourse;
掌握了以上知识,题目中的问题就迎刃而解了,对于要求的语文成绩这个条件,就是一个普通的where条件,加在最后面就可以了!
SELECT NAME,(CASE
WHEN (grade>=90 AND GRADE<=100) THEN 'A'
WHEN (grade>=75 AND GRADE<=89) THEN 'B'
WHEN (grade>=60 AND GRADE<=74) THEN 'C'
WHEN (grade<60) THEN 'D'
WHEN (grade IS NULL) THEN 0
END) 等级
FROM score WHERE SUBJECT = '语文';
以上就是今天分享的全部内容,我们下期再见。
关注慧测,每天进步一点。
- END -
上期回顾:

慧测8月开班信息:
(别等啦,错过可能就是明年学习啦)
8月18日——自动化17期
8月18日——测试开发6期
8月18日——性能29期
8月18日——Python共享2期
欢迎加入我们:
慧测官网:www.huicewang.com
慧测Python群:324015481
公开课服务群:623636110
咨询QQ:2657535456
咨询微信号:huice666

慧测腾讯课堂 课程地址:


