Я хочу написать запрос postgresql, чтобы сделать следующее:
if(field1 > 0, field2 / field1 , 0)
Я пробовал этот запрос, но он не работает
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
Спасибо
Я хочу написать запрос postgresql, чтобы сделать следующее:
if(field1 > 0, field2 / field1 , 0)
Я пробовал этот запрос, но он не работает
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
Спасибо
Ответы:
Как указано в документации PostgreSQL здесь :
Выражение SQL CASE - это общее условное выражение, подобное операторам if / else в других языках программирования.
Фрагмент кода, специально отвечающий на ваш вопрос:
SELECT field1, field2,
CASE
WHEN field1>0 THEN field2/field1
ELSE 0
END
AS field3
FROM test
SELECT
заявлениях условные вы можете использовать, одна из которых CASE
, описаны здесь .
AS
Инструкция не является необходимой. Вы можете это сделатьEND field3
case when field1>0 then field2/field1 else 0 end as field3
В общем, альтернатива case when ...
is coalesce(nullif(x,bad_value),y)
(которая не может использоваться в случае OP). Например,
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
дает:
coalesce | coalesce | x | y
----------+----------+-----+-----
abc | abc | abc |
ghi | def | def | ghi
jkl | jkl | | jkl
mno | mno | | mno
pqr | pqr | pqr |
(5 rows)
case when
и это отвечает всем требованиям