CASE函数

CASE函数在SQL中用于根据条件返回不同的结果值。它分为简单CASE和搜索CASE两种形式。简单CASE通过比较测试表达式与简单表达式来决定返回哪个结果,而搜索CASE则基于布尔表达式的真假来决定。本文通过示例展示了如何使用CASE函数查询班级表中系号对应的名称,以及在成绩表中根据分数显示等级,还演示了如何统计学生性别数量和成绩等级分布。CASE函数在数据处理和分析中具有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CASE函数

是一种多分支的函数,可以根据条件列表的值返回多个可能的结果表达式中的一个。
可用在任何允许使用表达式的地方,但不能单独作为一个语句执行。
分为:
简单CASE函数
搜索CASE函数

简单 CASE函数

1

2

3

4

5

6

CASE 测试表达式

WHEN 简单表达式1 THEN 结果表达式1

WHEN 简单表达式2 THEN 结果表达式2 …

WHEN 简单表达式n THEN 结果表达式n

ELSE 结果表达式n+1 ]

END

计算测试表达式,按从上到下的书写顺序将测试表达式的值与每个WHEN子句的简单表达式进行比较。
如果某个简单表达式的值与测试表达式的值相等,则返回第一个与之匹配的WHEN子句所对应的结果表达式的值。
如果所有简单表达式的值与测试表达式的值都不相等,
若指定了ELSE子句,则返回ELSE子句中指定的结果表达式的值;
若没有指定ELSE子句,则返回NULL。

例48. 查询班级表中的学生的班号、班名、系号和班主任号,并对系号作如下处理:
当系号为1时,显示 “计算机系”;
当系号为2时,显示 “软件工程系”;
当系号为3时,显示 “物联网系”。

1

2

3

4

5

6

7

SELECT 班号 ,班名,

CASE 系号

WHEN THEN '软件工程系'

WHEN THEN '计算机系'

WHEN THEN '物联网系'

END AS 系号,班主任号

FROM 班级表

搜索CASE函数

1

2

3

4

5

6

CASE

WHEN 布尔表达式1 THEN 结果表达式1

WHEN 布尔表达式2 THEN 结果表达式2 …

WHEN 布尔表达式n THEN 结果表达式n

ELSE 结果表达式n+1 ]

END

按从上到下的书写顺序计算每个WHEN子句的布尔表达式。
返回第一个取值为TRUE的布尔表达式所对应的结果表达式的值。
如果没有取值为TRUE的布尔表达式,
则当指定了ELSE子句时,返回ELSE子句中指定的结果;
如果没有指定ELSE子句,则返回NULL。

例48用搜索CASE来做:

1

2

3

4

5

6

7

SELECT 班号 ,班名,

CASE

WHEN 系号=1 THEN '软件工程系'

WHEN 系号=2 THEN '计算机系'

WHEN 系号=3 THEN '物联网系'

END AS 系号,班主任号

FROM 班级表

例49.查询“M01F011”号课程的考试情况,列出学号、课程号和成绩,同时将百分制成绩显示为等级。

1

2

3

4

5

6

7

8

9

10

SELECT 学号,课程号,

CASE

WHEN 成绩 >= 90 THEN '优'

WHEN 成绩 BETWEEN 80 AND 89 THEN '良'

WHEN 成绩 BETWEEN 70 AND 79 THEN '中'

WHEN 成绩 BETWEEN 60 AND 69 THEN '及格'

WHEN 成绩 <60 THEN '不及格'

END 成绩

FROM 成绩表

WHERE 课程号 = 'M01F011'

CASE函数(续)

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

1

2

3

4

SELECT 班号,

COUNT(CASE WHEN 性别=‘男’ THEN ‘男’ END) 男生数,

COUNT(CASE WHEN 性别=‘女’ THEN ‘女’ END) 女生数

FROM 学生表 GROUP BY 班号

例51.判断成绩的等级,85-100为“优”,70-84为“良”,60-69为“及格”,60以下为“不及格”,并统计每一等级的人数。

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

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 SC

GROUP BY

CASE

WHEN GRADE BETWEEN 85 AND 100 THEN '优'

WHEN GRADE BETWEEN 70 AND 84 THEN '良'

WHEN GRADE BETWEEN 60 AND 69 THEN '及格'

ELSE '不及格'

END

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值