SQL SELECT CASE
介绍
在 SQL 中,SELECT CASE 语句用于根据一个或多个条件返回不同的结果。它允许我们根据特定条件选择不同的列或值并进行计算。
SELECT CASE 语句包括两个部分:CASE 和 END。CASE 后面的条件可以是列、表达式或其他SQL语句,然后根据这些条件返回不同结果。
在本文中,我们将详细探讨 SELECT CASE 语句的语法、用法和示例,以便更好地理解和应用它。
语法
SELECT CASE 语句的基本语法如下:
SELECT CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
其中,condition1、condition2 等是条件,result1、result2 等是对应满足条件的结果,ELSE 后面是一个默认结果,如果没有任何条件满足,将返回该默认结果。
示例
让我们通过几个示例来说明 SELECT CASE 的使用方式。
示例 1
假设我们有一个名为 students
的表,其中包含学生的姓名、年龄和成绩。我们想根据他们的成绩进行分类,并将他们分为优秀、良好、及格和不及格四个类别之一。
SELECT name,
CASE
WHEN grade >= 90 THEN '优秀'
WHEN grade >= 80 THEN '良好'
WHEN grade >= 60 THEN '及格'
ELSE '不及格'
END AS category
FROM students;
运行以上代码后,将返回一个包含姓名和对应成绩分类的结果集。
示例 2
假设我们还是用上述的 students
表,但现在我们想根据学生的年龄分为儿童、青少年和成年人三个类别,我们可以使用 SELECT CASE 语句来实现。
SELECT name,
CASE
WHEN age <= 12 THEN '儿童'
WHEN age <= 18 THEN '青少年'
ELSE '成年人'
END AS category
FROM students;
以上代码将根据学生的年龄返回一个结果集,其中包含姓名和对应的年龄分类。
示例 3
SELECT CASE 语句除了返回静态值,还可以进行计算。以下示例演示了如何计算学生的平均分,并将其分类。
SELECT name,
CASE
WHEN avg_grade >= 90 THEN '优秀'
WHEN avg_grade >= 80 THEN '良好'
WHEN avg_grade >= 60 THEN '及格'
ELSE '不及格'
END AS category
FROM (
SELECT name, AVG(grade) AS avg_grade
FROM students
GROUP BY name
) AS grades;
运行以上代码后,将返回一个包含学生姓名和对应的平均分分类的结果集。
总结
在本文中,我们详细介绍了 SELECT CASE 语句的语法和用法,以及给出了几个使用示例。SELECT CASE 语句使我们能够根据特定条件选择不同的列或值,并进行计算。这在对数据进行分类和分组时非常有用。