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
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
case when field1>0 then field2/field1 else 0 end as field3
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)