標籤:
postgresql支援CASE,COALESCE,NULLIF,GREATEST,LEAST條件運算式,使用它們有時候可以簡化許多功能實現。
測試表
test=# create table tbl_test(id int,name varchar(32),sex varchar(1));CREATE TABLEtest=# 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----條件運算式