[sql] postgresql의 IF-THEN-ELSE 문
다음을 수행하기 위해 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
답변
case when field1>0 then field2/field1 else 0 end as field3
답변
일반적으로 대안 case when ...
은 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)