PostgreSQL CASE语句
在 PostgreSQL 中,CASE语句是一种灵活的控制流语句,用于根据不同条件执行不同的操作。通过CASE语句,我们可以在查询中进行条件判断,并根据条件的不同返回不同的值。本文将详细介绍 PostgreSQL 中的CASE语句的用法及示例。
简单CASE表达式
首先,我们来看一下简单的CASE表达式的用法。简单CASE表达式用于在指定条件成立时返回一个值。其基本语法如下:
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
...
ELSE default_result
END
下面是一个简单的示例,根据不同成绩返回不同的等级:
SELECT
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM
students;
假设我们有一个名为 students 的表,包含学生的成绩信息。运行以上查询后,将返回每个学生的成绩等级。例如,如果学生的成绩为85,则输出为B。
搜索CASE表达式
除了简单的CASE表达式外,还可以使用搜索CASE表达式来实现更复杂的条件判断。搜索CASE表达式的语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
下面是一个示例,根据学生的成绩范围返回不同的等级:
SELECT
CASE
WHEN score BETWEEN 90 AND 100 THEN 'A'
WHEN score BETWEEN 80 AND 89 THEN 'B'
WHEN score BETWEEN 70 AND 79 THEN 'C'
ELSE 'D'
END AS grade
FROM
students;
运行以上查询后,将根据学生成绩在不同范围内返回不同的等级。
嵌套CASE表达式
在 PostgreSQL 中,还可以使用嵌套的CASE表达式来进行复杂的条件判断。嵌套CASE表达式的语法如下:
CASE
WHEN condition1 THEN
CASE
WHEN sub_condition1 THEN result1
...
END
WHEN condition2 THEN
CASE
WHEN sub_condition2 THEN result2
...
END
...
ELSE default_result
END
下面是一个示例,根据学生成绩进行复杂的判断:
SELECT
CASE
WHEN score >= 80 THEN
CASE
WHEN score >= 90 THEN 'A+'
ELSE 'A-'
END
ELSE 'B'
END AS grade
FROM
students;
运行以上查询后,将根据学生成绩返回不同的等级,如果成绩在80以上则进一步细分。
使用CASE表达式更新数据
除了在查询中使用CASE表达式外,我们还可以在更新数据时使用CASE表达式来根据条件更新数据。下面是一个示例,将学生成绩在90以上的改为’A+’,在80到89之间的改为’B’:
UPDATE students
SET grade =
CASE
WHEN score >= 90 THEN 'A+'
WHEN score >= 80 THEN 'B'
ELSE grade
END;
运行以上更新语句后,将会根据条件更新学生的成绩等级。
使用CASE表达式进行分组聚合
最后,我们来看一个使用CASE表达式进行分组聚合的示例。