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ę
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ę
Odpowiedzi:
Jak stwierdzono w dokumentach PostgreSQL tutaj :
Wyrażenie SQL CASE jest ogólnym wyrażeniem warunkowym, podobnym do instrukcji if / else w innych językach programowania.
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
SELECT
oświadczenia warunkowe można wykorzystać, z których jeden jest CASE
, 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
Ogólnie rzecz biorąc, alternatywa dla case when ...
jest coalesce(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)
case when
i to pasuje do rachunku