postgresql——条件判断函数

转载:https://blog.youkuaiyun.com/qq_36011279/article/details/81542174

postgresql支持CASE,COALESCE,NULLIF,GREATEST,LEAST条件表达式,使用它们有时候可以简化许多功能实现。

测试表

test=# create table tbl_test(id int,name varchar(32),sex varchar(1));
CREATE TABLE
test=# insert into tbl_test values(1,'张三','m'),(2,'李四','m'),(3,'王五','f');
INSERT 0 3

CASE

CASE类似其他语言中的if/else等,当符合不同条件时则进行不同的运算。

示例1.查询tbl_test表,如果sex等于'm'则显示'男',,如果是'f'则显示'女'

 

test=# select name,case when sex = 'm' then '男' else '女' end as sex from tbl_test;
 name | sex 
------+-----
 张三 | 男
 李四 | 男
 王五 | 女
(3 rows)

 

 

示例2.查询tbl_test表中男女的人数

方法1.分别查询

 

test=# select count(*) as 女 from tbl_test where sex = 'f';
 女 
----
  1
(1 row)

test=# select count(*) as 男 from tbl_test where sex = 'm';
 男 
----
  2
(1 row)

 

方法2.使用case一次查询

 

test=# select sum(case when sex = 'm' then 1 else 0 end) as 男,sum(case when sex='f' then 1 else 0 end)as 女 from tbl_test;
 男 | 女 
----+----
  2 |  1
(1 row)

 

coalesce

coalesce(value[,...])

入参个数不限,返回参数中第一个非NULL值。

 

test=# select coalesce(null,null,1,2,3);
 coalesce 
----------
        1
(1 row)

test=# select coalesce(null,null,'one','two');
 coalesce 
----------
 one
(1 row)

 

NULLIF

nullif(arg1,arg2)

如果两个参数值相等则返回NULL,否则返回arg1.

 

test=# \pset null 'NULL'
Null display is "NULL".
test=# 
test=# 
test=# select nullif(1,1);
 nullif 
--------
   NULL
(1 row)

test=# select nullif(1,2);
 nullif 
--------
      1
(1 row)

 

GREATEST和LEAST

GREATEST(value [, ...])
LEAST(value [, ...])

入参个数不限,分别返回入参中的最大和最小值

test=# select greatest(1,2,3,4);

greatest

----------

4

(1 row)

test=# select greatest('a','b','c','d');

greatest

----------

d

(1 row)

test=# select least('a','b','c','d');

least

-------

a

(1 row)

test=# select least(1,2,3,4);

least

-------

1

(1 row)

### PostgreSQL 中 IF 判断语句的用法 在 PostgreSQL 中,`IF` 判断语句通常用于存储过程或触发器中,以实现条件逻辑控制。以下是关于 `IF` 语句的基本语法和使用方法: #### 基本语法 `IF` 语句支持多种结构,包括简单的 `IF ... THEN`、带有 `ELSE` 的分支以及多分支的 `ELSEIF` 结构。 1. **单分支判断** 当只需要执行一个条件分支时,可以使用以下语法: ```sql IF condition THEN -- 条件为真时执行的语句 END IF; ``` 示例: ```sql IF NEW.salary > 5000 THEN RAISE NOTICE 'Salary is too high!'; END IF; ``` 2. **双分支判断** 当需要根据条件选择两个分支之一时,可以使用以下语法: ```sql IF condition THEN -- 条件为真时执行的语句 ELSE -- 条件为假时执行的语句 END IF; ``` 示例: ```sql IF NEW.age >= 18 THEN RAISE NOTICE 'User is an adult.'; ELSE RAISE NOTICE 'User is a minor.'; END IF; ``` 3. **多分支判断** 当需要处理多个条件分支时,可以使用 `ELSEIF`(或 `ELSIF`)扩展语法: ```sql IF condition1 THEN -- 条件1为真时执行的语句 ELSEIF condition2 THEN -- 条件2为真时执行的语句 ELSE -- 所有条件为假时执行的语句 END IF; ``` 示例: ```sql IF NEW.grade = 'A' THEN NEW.rank := 1; ELSEIF NEW.grade = 'B' THEN NEW.rank := 2; ELSE NEW.rank := 3; END IF; ``` 4. **嵌套判断** 在复杂的逻辑场景下,可以在 `IF` 语句中嵌套其他 `IF` 语句: ```sql IF condition1 THEN IF condition2 THEN -- 条件1和条件2都为真时执行的语句 ELSE -- 条件1为真但条件2为假时执行的语句 END IF; ELSE -- 条件1为假时执行的语句 END IF; ``` 示例: ```sql IF NEW.status = 'active' THEN IF NEW.priority = 'high' THEN RAISE NOTICE 'High priority active task.'; ELSE RAISE NOTICE 'Low priority active task.'; END IF; ELSE RAISE NOTICE 'Task is not active.'; END IF; ``` #### 使用场景 - **触发器中**:`IF` 语句常用于触发器中,根据某些条件决定是否执行特定操作[^2]。 - **存储过程中**:在存储过程中,`IF` 语句可以用来实现复杂的业务逻辑[^3]。 #### 注意事项 - `IF` 语句必须包含 `END IF;` 来标记结束。 - 条件表达式中的逻辑运算符包括 `AND`、`OR` 和 `NOT` 等。 - 在触发器中使用 `IF` 语句时,需要注意性能影响,避免不必要的复杂逻辑。 ```sql CREATE OR REPLACE FUNCTION check_salary() RETURNS TRIGGER AS $$ BEGIN IF NEW.salary > 5000 THEN RAISE NOTICE 'Salary is too high!'; ELSE RAISE NOTICE 'Salary is acceptable.'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER salary_check BEFORE INSERT OR UPDATE ON employees FOR EACH ROW EXECUTE FUNCTION check_salary(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值