SQL CASE WHEN 多条件嵌套

1. 引言
在SQL查询中,我们经常需要根据不同的条件来返回不同的结果。SQL提供了CASE WHEN语句来实现多条件嵌套判断。本文将详细介绍CASE WHEN语句的用法和示例代码。
2. 基本语法
CASE WHEN语句可以根据一个或多个条件来返回不同的结果。它的基本语法如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
其中,condition1、condition2等为条件表达式,result1、result2等为满足条件时返回的结果。ELSE后面的result为当没有条件满足时返回的默认结果。
3. 单条件判断
首先,让我们看一个简单的示例来演示单条件判断的用法。假设我们有一个表students,其中包含了学生的姓名和考试分数。我们想根据学生的分数判断他们的考试成绩等级,可以使用CASE WHEN语句来实现。
SELECT name, score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 THEN '良好'
WHEN score >= 70 THEN '中等'
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS grade
FROM students;
上述SQL语句会返回一个包含学生姓名、分数和成绩等级的结果集。例如,假设学生表中有以下数据:
| name | score |
|---|---|
| 张三 | 78 |
| 李四 | 85 |
| 王五 | 92 |
| 赵六 | 60 |
则以上SQL语句的执行结果如下:
| name | score | grade |
|---|---|---|
| 张三 | 78 | 中等 |
| 李四 | 85 | 良好 |
| 王五 | 92 | 优秀 |
| 赵六 | 60 | 及格 |
通过CASE WHEN语句,我们可以根据学生的分数判断他们的考试成绩等级,并将结果作为一个新的列进行显示。
4. 多条件嵌套判断
CASE WHEN语句还支持多条件嵌套判断。这意味着我们可以根据多个条件的组合来返回不同的结果。下面是一个示例代码,它根据学生的分数和缺勤次数来判断他们的考勤情况。
SELECT name, score, absence,
CASE
WHEN score >= 90 AND absence = 0 THEN '优秀'
WHEN score >= 80 AND absence <= 2 THEN '良好'
WHEN score >= 70 AND absence <= 4 THEN '中等'
WHEN score >= 60 AND absence <= 6 THEN '及格'
ELSE '不及格'
END AS attendance
FROM students;
假设学生表中的数据如下所示:
| name | score | absence |
|---|---|---|
| 张三 | 78 | 1 |
| 李四 | 85 | 3 |
| 王五 | 92 | 0 |
| 赵六 | 60 | 5 |
执行以上SQL语句后,结果如下:
| name | score | absence | attendance |
|---|---|---|---|
| 张三 | 78 | 1 | 良好 |
| 李四 | 85 | 3 | 中等 |
| 王五 | 92 | 0 | 优秀 |
| 赵六 | 60 | 5 | 不及格 |
通过多条件嵌套判断,我们可以根据学生的分数和缺勤次数来判断他们的考勤情况,并将结果作为一个新的列进行显示。
5. 结束语
本文详细介绍了SQL中CASE WHEN语句的用法和示例代码。通过CASE WHEN语句,我们可以根据一个或多个条件来返回不同的结果。这使得查询结果更加灵活和可读性更强。
极客笔记