Я хочу написати запит 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 ...
є coalesce(nullif(x,bad_value),y)
(що не може бути використана у випадку з ОП). Наприклад,
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
і це відповідає рахунку