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
语句,我们可以根据一个或多个条件来返回不同的结果。这使得查询结果更加灵活和可读性更强。