wake-up-neo.net

IF-THEN-ELSE-Anweisungen in Postgresql

Ich freue mich darauf, eine postgresql-Abfrage zu schreiben, um Folgendes zu tun:

if(field1 > 0,  field2 / field1 , 0)

Ich habe diese Abfrage ausprobiert, aber sie funktioniert nicht

if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3

danke dir

44
user2311028

Wie in PostgreSQL-Dokumenten hier angegeben:

Der SQL CASE-Ausdruck ist ein generischer bedingter Ausdruck, ähnlich den if/else-Anweisungen in anderen Programmiersprachen.

Code-Snippet zur spezifischen Beantwortung Ihrer Frage:

SELECT field1, field2,
  CASE
    WHEN field1>0 THEN field2/field1
    ELSE 0
  END 
  AS field3
FROM test
88
case when field1>0 then field2/field1 else 0 end as field3
14

Im Allgemeinen ist coalesce(nullif(x,bad_value),y) eine Alternative zu case when ... (die im Fall von OP nicht verwendet werden kann). Zum Beispiel,

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

gibt:

 coalesce | coalesce |  x  |  y  
----------+----------+-----+-----
 abc      | abc      | abc | 
 ghi      | def      | def | ghi
 jkl      | jkl      |     | jkl
 mno      | mno      |     | mno
 pqr      | pqr      | pqr | 
(5 rows)