pgsql中case when
在 PostgreSQL 数据库中,CASE WHEN
语句是一种有条件的逻辑表达式,用于根据不同的条件返回不同的结果。它的语法格式如下:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE default_result
END
在上面的语法中,CASE
关键字开始一个 CASE
表达式,如果 condition1
满足,则返回 result1
;如果 condition2
满足,则返回 result2
;如果都不满足,则返回 default_result
。这使得在 SELECT
语句或者其他 PostgreSQL 查询中可以根据条件决定返回的结果。
接下来,我们将通过一些示例来介绍在 PostgreSQL 中如何使用 CASE WHEN
语句。
示例一:根据成绩判断等级
假设有一个学生成绩表 grades
,包含学生姓名和成绩两个字段。我们要根据不同的成绩来判断学生的等级。
SELECT
student_name,
grade,
CASE
WHEN grade >= 90 THEN 'A'
WHEN grade >= 80 THEN 'B'
WHEN grade >= 70 THEN 'C'
ELSE 'D'
END AS grade_level
FROM grades;
运行以上查询后,将会得到每个学生的姓名、成绩和对应的等级:
| student_name | grade | grade_level |
|--------------|-------|-------------|
| Alice | 95 | A |
| Bob | 85 | B |
| Cindy | 75 | C |
| David | 60 | D |
示例二:统计订单状态
假设有一个订单表 orders
,包含订单号和订单状态两个字段。我们要统计不同订单状态的数量,并给出相应的描述。
SELECT
order_id,
order_status,
CASE
WHEN order_status = 'NEW' THEN '新订单'
WHEN order_status = 'PROCESSING' THEN '处理中'
WHEN order_status = 'SHIPPED' THEN '已发货'
ELSE '未知状态'
END AS status_description
FROM orders;
运行以上查询后,将得到每个订单的订单号、订单状态和状态描述:
| order_id | order_status | status_description |
|----------|--------------|--------------------|
| 1234 | NEW | 新订单 |
| 5678 | PROCESSING | 处理中 |
| 9101 | SHIPPED | 已发货 |
| 1123 | RETURNED | 未知状态 |
示例三:使用 CASE WHEN
更新数据
除了在 SELECT
查询中使用 CASE WHEN
,我们还可以在 UPDATE
语句中使用 CASE WHEN
更新数据。例如,假设我们要将成绩表中成绩大于等于80的学生等级改为’A+’。
UPDATE grades
SET grade_level = CASE
WHEN grade >= 80 THEN 'A+'
ELSE grade_level
END;
运行以上更新语句后,所有成绩大于等于80的学生等级将会被更新为’A+’。
通过以上示例,我们可以看到在 PostgreSQL 中如何使用 CASE WHEN
语句来根据条件返回不同的结果,无论是在查询还是更新数据时,都是一种非常有用的逻辑表达式。