Chcę napisać zapytanie postgresql, aby wykonać następujące czynności:
if(field1 > 0, field2 / field1 , 0)
Próbowałem tego zapytania, ale nie działa
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
Dziękuję
sql
postgresql
user2311028
źródło
źródło
Odpowiedzi:
Jak stwierdzono w dokumentach PostgreSQL tutaj :
Fragment kodu odpowiadający konkretnie na Twoje pytanie:
SELECT field1, field2, CASE WHEN field1>0 THEN field2/field1 ELSE 0 END AS field3 FROM test
źródło
SELECT
oświadczenia warunkowe można wykorzystać, z których jeden jestCASE
, są udokumentowane tutaj .AS
Instrukcja nie jest konieczne. Możesz to zrobićEND field3
case when field1>0 then field2/field1 else 0 end as field3
źródło
Ogólnie rzecz biorąc, alternatywa dla
case when ...
jestcoalesce(nullif(x,bad_value),y)
(której nie można użyć w przypadku OP). Na przykład,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
daje:
coalesce | coalesce | x | y ----------+----------+-----+----- abc | abc | abc | ghi | def | def | ghi jkl | jkl | | jkl mno | mno | | mno pqr | pqr | pqr | (5 rows)
źródło
case when
i to pasuje do rachunku