pgsql中的CASE WHEN语句详解

2024年06月14日 pgsql中的CASE WHEN语句详解 极客笔记

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

CASE WHEN语句还支持嵌套,即在WHENELSE子句中再使用另一个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;

在上面的示例中,我们根据学生的分数和性别给出了不同的评级。

使用CASE WHEN更新数据

除了在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/

展开阅读全文