postgresql支持CASE,COALESCE,NULLIF,GREATEST,LEAST條件表達式,使用它們有時候能夠簡化許多功能實現。
sql
測試表post
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相似其餘語言中的if/else等,當符合不一樣條件時則進行不一樣的運算。測試
示例1.查詢tbl_test表,若是sex等於'm'則顯示'男',,若是是'f'則顯示'女'spa
test=# select name,case when sex = 'm' then '男' else '女' end as sex from tbl_test; name | sex ------+----- 張三 | 男 李四 | 男 王五 | 女 (3 rows)
示例2.查詢tbl_test表中男女的人數postgresql
方法1.分別查詢code
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一次查詢blog
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(value[,...])table
入參個數不限,返回參數中第一個非NULL值。ast
test=# select coalesce(null,null,1,2,3); coalesce ---------- 1 (1 row) test=# select coalesce(null,null,'one','two'); coalesce ---------- one (1 row)
nullif(arg1,arg2)class
若是兩個參數值相等則返回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(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)