postgresql中的IF-THEN-ELSE语句

use*_*028 64 sql postgresql

我正在寻找一个postgresql查询来执行以下操作:

if(field1 > 0,  field2 / field1 , 0)
Run Code Online (Sandbox Code Playgroud)

我试过这个查询,但它不起作用

if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
Run Code Online (Sandbox Code Playgroud)

谢谢你

Jos*_*mit 116

如PostgreSQL的文档中阐明在这里:

SQL CASE表达式是一个通用条件表达式,类似于其他编程语言中的if/else语句.

代码段专门回答您的问题:

SELECT field1, field2,
  CASE
    WHEN field1>0 THEN field2/field1
    ELSE 0
  END 
  AS field3
FROM test
Run Code Online (Sandbox Code Playgroud)

  • 出于好奇,是不是有任何使用if-then-else语句的解决方案?问题是if-then-else,但答案是转换案例陈述. (3认同)
  • @MaximilianoBecerra 完成。请看一下。谢谢你的建议。 (3认同)
  • 嗨,阿贝尔,这个问题要求解决特定问题。答案解决了该特定问题。在“SELECT”语句中,您可以使用的条件,其中一个是“CASE”,记录在[此处](https://www.postgresql.org/docs/9.1/static/functions-conditional.html)。 (2认同)

Tha*_*kis 19

case when field1>0 then field2/field1 else 0 end as field3
Run Code Online (Sandbox Code Playgroud)


184*_*615 5

一般来说,case when ...is的替代方案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
Run Code Online (Sandbox Code Playgroud)

给出:

 coalesce | coalesce |  x  |  y  
----------+----------+-----+-----
 abc      | abc      | abc | 
 ghi      | def      | def | ghi
 jkl      | jkl      |     | jkl
 mno      | mno      |     | mno
 pqr      | pqr      | pqr | 
(5 rows)
Run Code Online (Sandbox Code Playgroud)