我正在寻找编写一个PostgreSQL查询来执行以下操作:
if(field1 > 0, field2 / field1 , 0)
我已经试过这个查询,但是没有用
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
谢谢你
Answers:
如PostgreSQL的文档中阐明在这里:
SQL CASE表达式是通用条件表达式,类似于其他编程语言中的if / else语句。
专门回答您的问题的代码段:
SELECT field1, field2,
CASE
WHEN field1>0 THEN field2/field1
ELSE 0
END
AS field3
FROM test
AS
说明不是必需的。您可以这样做END field3
case when field1>0 then field2/field1 else 0 end as field3
通常,替代方法case when ...
是coalesce(nullif(x,bad_value),y)
(在OP的情况下不能使用)。例如,
select coalesce(nullif(y,''),x), coalesce(nullif(x,''),y), *
from ( (select 'abc' as x, '' as y)
union all (select 'def' as x, 'ghi' as y)
union all (select '' as x, 'jkl' as y)
union all (select null as x, 'mno' as y)
union all (select 'pqr' as x, null as y)
) q
给出:
coalesce | coalesce | x | y
----------+----------+-----+-----
abc | abc | abc |
ghi | def | def | ghi
jkl | jkl | | jkl
mno | mno | | mno
pqr | pqr | pqr |
(5 rows)
case when