2024年06月14日 pgsql中的CASE WHEN语句详解 极客笔记
在PostgreSQL中,CASE WHEN
语句是用于在SQL查询中进行条件判断和返回不同结果的强大工具。通过使用CASE WHEN
语句,我们可以根据条件选择性地返回不同的值或执行不同的操作,这对于数据处理和分析非常有用。
CASE WHEN
语句的基本语法如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
CASE
是开始CASE WHEN
语句的标识。WHEN
后面跟随着一个条件,如果该条件成立,则返回对应的结果。THEN
用于指定条件成立时返回的结果。ELSE
用于指定当所有条件都不成立时的默认结果。END
表示CASE WHEN
语句的结束。假设我们有一个学生表students
,结构如下:
CREATE TABLE students (
id SERIAL PRIMARY KEY,
name VARCHAR(50),
score INTEGER
);
INSERT INTO students (name, score)
VALUES
('Alice', 85),
('Bob', 72),
('Charlie', 65),
('David', 90);
现在,我们想根据学生的分数给他们评级,可以使用CASE WHEN
语句来实现:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END AS grade
FROM students;
运行以上查询,将会得到每位学生的姓名、分数以及评级:
name | score | grade |
---|---|---|
Alice | 85 | B |
Bob | 72 | C |
Charlie | 65 | D |
David | 90 | A |
CASE WHEN
语句还支持嵌套,即在WHEN
或ELSE
子句中再使用另一个CASE WHEN
语句。这样可以处理更复杂的条件逻辑。
例如,如果我们想要根据学生的分数和性别给予不同的评级,可以使用嵌套CASE WHEN
:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN
CASE
WHEN gender = 'M' THEN 'A+'
WHEN gender = 'F' THEN 'A'
END
WHEN score >= 80 THEN
CASE
WHEN gender = 'M' THEN 'B+'
WHEN gender = 'F' THEN 'B'
END
WHEN score >= 70 THEN
CASE
WHEN gender = 'M' THEN 'C+'
WHEN gender = 'F' THEN 'C'
END
ELSE 'D'
END AS grade
FROM students;
在上面的示例中,我们根据学生的分数和性别给出了不同的评级。
除了在SELECT
语句中使用CASE WHEN
,我们也可以在UPDATE
语句中使用CASE WHEN
来根据条件更新数据。
假设我们想根据学生的分数更新他们的级别,可以这样做:
UPDATE students
SET grade = CASE
WHEN score >= 90 THEN 'A'
WHEN score >= 80 THEN 'B'
WHEN score >= 70 THEN 'C'
ELSE 'D'
END;
通过以上UPDATE
语句,学生表中的grade
字段会根据学生的分数被更新为相应的评级。
CASE WHEN
语句是一个非常有用的SQL语法,它可以根据条件动态地选择返回不同的结果。在数据处理和分析中,经常会碰到需要根据条件进行逻辑判断的情况,这时候CASE WHEN
就可以派上用场。合理地运用CASE WHEN
语句,可以让SQL查询更加灵活和强大。
本文链接:http://so.lmcjl.com/news/6532/