Ich möchte eine postgresql-Abfrage 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
sql
postgresql
user2311028
quelle
quelle
Antworten:
Wie in den PostgreSQL-Dokumenten hier angegeben :
Code-Snippet zur spezifischen Beantwortung Ihrer Frage:
SELECT field1, field2, CASE WHEN field1>0 THEN field2/field1 ELSE 0 END AS field3 FROM test
quelle
SELECT
Aussagen können die conditionals Sie verwenden, von denen eineCASE
, dokumentiert hier .AS
Anweisung ist nicht erforderlich. Sie können dies tunEND field3
case when field1>0 then field2/field1 else 0 end as field3
quelle
Im Allgemeinen ist eine Alternative zu
case when ...
istcoalesce(nullif(x,bad_value),y)
(die nicht im OP Fall verwendet werden können). 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)
quelle
case when
und das passt zur Rechnung