Я хочу написать запрос postgresql, чтобы сделать следующее:
if(field1 > 0, field2 / field1 , 0)
Я пробовал этот запрос, но он не работает
if (field1 > 0)
then return field2 / field1 as field3
else return 0 as field3
Спасибо
sql
postgresql
user2311028
источник
источник
Ответы:
Как указано в документации PostgreSQL здесь :
Фрагмент кода, специально отвечающий на ваш вопрос:
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 ...
iscoalesce(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
и это отвечает всем требованиям