postgresql case when 输出多行
PostgreSQL中的CASE WHEN语句是用于在查询中根据不同的条件返回不同的结果。在实际应用中,有时候我们需要输出多行数据,每行数据根据不同条件进行处理。在这种情况下,我们可以使用CASE WHEN语句来实现这样的需求。
CASE WHEN语法
CASE WHEN语句的基本语法如下:
SELECT
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END AS alias_name
FROM
table_name;
其中,condition1
、condition2
等是条件表达式,result1
、result2
等是每个条件满足时返回的结果,default_result
是在所有条件都不满足时返回的默认结果,alias_name
是结果列的别名。
示例
假设有一个学生成绩表grades
,包含了学生的姓名、科目和成绩。现在我们需要根据不同的条件输出多行数据,比如对于每个学生,对于及格的成绩显示为”及格”,对不及格的成绩显示为”不及格”。我们可以使用CASE WHEN语句来实现这个需求。
CREATE TABLE grades (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
subject VARCHAR(50),
score INT
);
INSERT INTO grades (name, subject, score)
VALUES
('Alice', 'Math', 85),
('Alice', 'English', 75),
('Bob', 'Math', 60),
('Bob', 'English', 45),
('Charlie', 'Math', 70),
('Charlie', 'English', 80);
SELECT
name,
subject,
CASE
WHEN score >= 60 THEN '及格'
ELSE '不及格'
END AS result
FROM
grades
ORDER BY
name, subject;
运行以上SQL语句,我们可以得到如下结果:
name | subject | result
--------+---------+--------
Alice | English | 及格
Alice | Math | 及格
Bob | English | 不及格
Bob | Math | 及格
Charlie | English | 及格
Charlie | Math | 及格
在这个示例中,我们通过CASE WHEN语句根据成绩是否及格来输出不同的结果,从而实现了对多行数据的条件处理。
总结
在实际应用中,我们经常需要对多行数据根据不同的条件进行处理,使用CASE WHEN语句可以很方便地实现这个需求。通过合理地设置条件表达式和结果值,我们可以灵活地对数据进行处理,使得查询结果更加符合我们的预期。在使用CASE WHEN语句时,需要注意保持语法规范,确保条件和结果的一一对应关系,从而避免出现错误。