【发布时间】:2013-09-26 13:35:21
【问题描述】:
我希望编写一个 postgresql 查询来执行以下操作:
if(field1 > 0, field2 / field1 , 0)
我试过这个查询,但它不起作用
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
谢谢你
【问题讨论】:
标签: sql postgresql
我希望编写一个 postgresql 查询来执行以下操作:
if(field1 > 0, field2 / field1 , 0)
我试过这个查询,但它不起作用
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
谢谢你
【问题讨论】:
标签: sql postgresql
如 PostgreSQL 文档 here 中所述:
SQL CASE 表达式是一个通用条件表达式,类似于其他编程语言中的 if/else 语句。
代码 sn-p 专门回答您的问题:
SELECT field1, field2,
CASE
WHEN field1>0 THEN field2/field1
ELSE 0
END
AS field3
FROM test
【讨论】:
SELECT 语句中,您可以使用的条件(其中一个是CASE)记录在here 中。
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 的壮观场面,这符合要求