[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)


답변