PostgreSQL数据的CASE表达式

本文介绍了SQL中的CASE表达式的使用方法,类似于其他编程语言中的if/else语句,并展示了COALESCE、NULLIF、GREATEST和LEAST等实用函数的应用示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SQL CASE 表达式是一种通用的条件表达式,类似于其它语言中的 if/else 语句。
<big>CASE WHEN condition THEN result
[WHEN ...]
[ELSE result]
END</big>
<big>
select COALESCE(nullif(0, 0), 1) --return 1
select nullif(1,2) --return 1
select nullif(1,1) --return null
select GREATEST(1, 2, 4, 10.56, 12) --return 12
select LEAST(1, 1,'2',3, 0.5,10,5) --return 0.5</big>

COALESCE 返回它的第一个非 NULL 的参数的值。 它常用于在为显示目的检索数据时用缺省值替换 NULL 值
NULLIF(value1, value2) 当且仅当 value1 和 value2 相等时,NULLIF 才返回 NULL。 否则它返回 value1。 这些可以用于执行上面给出的 COALESCE 例子的反例:
GREATEST 返回列表中的最大值
LEAST 返回列表中的最小值
<think>好的,用户让我介绍一下PostgreSQL中如何使用CASE WHEN。虽然我的专长是Java,但这个问题涉及到PostgreSQLSQL语法,我需要先回忆一下相关的知识。 首先,CASE WHENSQL中用于条件判断,类似于编程语言中的if-else语句。PostgreSQL支持两种形式的CASE表达式:简单CASE和搜索CASE。简单CASE是当某个字段等于特定值时执行,而搜索CASE可以处理更复杂的条件,比如范围判断或多个条件组合。 接下来,我需要举几个例子来说明这两种用法。比如,简单CASE的例子可能是一个根据部门编号返回部门名称的情况,而搜索CASE的例子可以是根据成绩划分等级。同时,用户可能还会想知道如何在UPDATE语句中使用CASE WHEN,或者在聚合函数中结合使用。 然后,我需要解释每个例子的作用,比如第一个简单CASE示例如何将dept_no转换为部门名称。第二个搜索CASE示例根据score的值返回不同的等级。第三个例子展示如何在UPDATE中根据条件修改数据,第四个则是在SUM函数中使用CASE进行条件统计。 还要注意说明CASE WHEN的基本语法结构,包括WHEN、THEN、ELSE和END的关键字使用,以及两种形式的区别。同时,提醒用户在使用时要注意条件顺序,因为执行是从上到下的,一旦满足条件就返回结果,剩下的条件不再判断。 最后,确保回答符合格式要求,先回答问题,给出解释和代码示例,然后提出相关问题。相关问题需要围绕PostgreSQLCASE WHEN,可能涉及性能优化、与其他条件语句的区别、在JOIN中的应用等。</think><< 在PostgreSQL中,`CASE WHEN`是条件表达式,用于根据条件执行不同的逻辑分支。它类似于编程语言中的`if-else`语句,常用于SELECT查询、UPDATE操作或聚合函数中。以下是具体用法和示例: ### 1. 简单CASE表达式 ```sql SELECT employee_id, CASE dept_no WHEN 1 THEN '技术部' WHEN 2 THEN '市场部' ELSE '其他部门' END AS department FROM employees; ``` **解释**:当`dept_no`字段等于1时返回'技术部',等于2时返回'市场部',其他情况返回'其他部门' ### 2. 搜索式CASE表达式 ```sql SELECT student_name, CASE WHEN score >= 90 THEN 'A' WHEN score >= 80 THEN 'B' WHEN score >= 70 THEN 'C' ELSE 'D' END AS grade FROM exam_results; ``` **解释**:根据score字段的值范围返回不同的等级评定 ### 3. 在UPDATE语句中使用 ```sql UPDATE products SET price = CASE WHEN stock < 10 THEN price * 1.1 -- 库存不足时涨价10% WHEN stock > 100 THEN price * 0.9 -- 库存过剩时降价10% ELSE price END; ``` ### 4. 聚合函数中的使用 ```sql SELECT COUNT(*) AS total_orders, SUM(CASE WHEN status = 'completed' THEN 1 ELSE 0 END) AS completed_orders, SUM(CASE WHEN order_date > '2023-01-01' THEN amount ELSE 0 END) AS recent_sales FROM orders; ``` **注意事项**: 1. `CASE`表达式必须包含`END`结尾 2. 条件判断按书写顺序执行,第一个满足的条件会立即返回 3. 可以嵌套使用多个`CASE`表达式 4. 当所有条件都不满足且没有`ELSE`子句时,返回NULL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值