pgsql case when
在 PostgreSQL 数据库中,我们可以使用 CASE WHEN
结构来实现条件判断和分支选择。CASE WHEN
结构可以根据指定的条件表达式,选择并执行不同的分支逻辑。本文将详细介绍 CASE WHEN
结构的语法和用法,并提供一些示例代码供参考。
一、CASE WHEN
语法
CASE WHEN
结构的语法如下所示:
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
...
ELSE result
END
其中:
condition1
,condition2
, … 是条件表达式,用于判断是否满足相应的条件。result1
,result2
, … 是当满足相应条件时的结果。ELSE
子句是可选的,用于指定当条件都不满足时的默认结果。
CASE WHEN
结构可以嵌套使用,也可以在 SELECT
语句中直接使用。
二、CASE WHEN
用法示例
1. 简单示例
我们先来看一个简单的示例,假设有一张 students
表,包含了学生的姓名和年龄信息。我们想将学生的年龄按照以下规则分类:
- 年龄小于 18 岁的学生为 “未成年”
- 年龄介于 18 岁和 22 岁之间的学生为 “青年”
- 年龄大于等于 23 岁的学生为 “成年”
下面是使用 CASE WHEN
结构实现此功能的示例代码:
SELECT
name,
age,
CASE
WHEN age < 18 THEN '未成年'
WHEN age >= 18 AND age <= 22 THEN '青年'
ELSE '成年'
END AS age_category
FROM
students;
运行以上代码,将得到如下结果:
+-------+-----+--------------+
| name | age | age_category |
+-------+-----+--------------+
| 张三 | 16 | 未成年 |
| 李四 | 20 | 青年 |
| 王五 | 25 | 成年 |
| ... | ... | ... |
+-------+-----+--------------+
2. 复杂条件示例
在实际应用中,我们经常需要处理一些复杂的条件判断。下面我们通过一个示例来演示如何使用 CASE WHEN
结构实现复杂条件判断。
假设有一个 orders
表,包含了订单的信息,其中包括订单号、订单日期和订单金额。我们要将订单按照以下规则分类:
- 订单金额大于等于 1000 的为 “高价订单”
- 订单金额大于等于 500 且小于 1000 的为 “中等订单”
- 订单金额小于 500 的为 “低价订单”
此外,对于今天之前的订单,我们将其金额减半,作为一个新的字段。下面是使用 CASE WHEN
结构实现此功能的示例代码:
SELECT
order_id,
order_date,
order_amount,
CASE
WHEN order_date < current_date THEN order_amount / 2
WHEN order_amount >= 1000 THEN '高价订单'
WHEN order_amount >= 500 AND order_amount < 1000 THEN '中等订单'
ELSE '低价订单'
END AS order_category
FROM
orders;
运行以上代码,将得到如下结果:
+----------+------------+--------------+---------------+
| order_id | order_date | order_amount | order_category|
+----------+------------+--------------+---------------+
| 100001 | 2022-01-01 | 1200 | 高价订单 |
| 100002 | 2022-01-02 | 800 | 中等订单 |
| 100003 | 2022-01-03 | 300 | 低价订单 |
| ... | ... | ... | ... |
+----------+------------+--------------+---------------+
三、CASE WHEN
嵌套使用
CASE WHEN
结构支持嵌套使用,可以根据多个条件进行分支判断。下面是一个示例代码,展示了如何在 CASE WHEN
结构中嵌套使用另一个 CASE WHEN
结构:
SELECT
name,
score,
CASE
WHEN score >= 90 THEN '优秀'
WHEN score >= 80 AND score < 90 THEN '良好'
WHEN score >= 70 AND score < 80 THEN '中等'
ELSE
CASE
WHEN score >= 60 AND score < 70 THEN '及格'
ELSE '不及格'
END
END AS result
FROM
students;
运行以上代码,将得到学生的成绩结果信息。
四、总结
本文介绍了 PostgreSQL 数据库中 CASE WHEN
结构的语法和用法,包括简单示例、复杂条件示例以及嵌套使用示例。使用 CASE WHEN
结构可以方便地实现条件判断和分支选择的逻辑。