반응형
필자가 case when을 처음 써 봤을 때는 두 개의 양이 차이가 나면 yes, 차이가 나지 않으면 no라고 표시하는 일을 요청받았을 때다. decode를 사용해볼까도 했는데 초보 데이터 분석가에게는 조금 복잡해 보여서 case when문을 선택했다. 다른 언어를 배웠던 기억이 있어서 그런지 필자에게 가독성이 좋았고 이해하기 쉬웠다. 하지만 여기에선 case when문과 decode문 둘 다 포스팅할 예정이다.
case when문
case문은 여러가지 조건이나 값 중 하나를 선택하여 결과를 보여준다. case문은 조건이 다른 2가지의 방식이 존재한다.
1. 값에 따른 결과 값 return 방식
case when (값1) then (결과 값1)
when (값2) then (결과 값2)
...
else (결과 값n) end ;
ex)
case when gender = '1' then '여자'
when gender = '2' then '남자'
...
else 'unknown' end ;
else는 위에서 일치하는 값이 없다면 선택한 디폴트 값으로 줄 수 있다. 필요 없으면 생략이 가능하다. 혹은, when의 값 중에서 일치하는 것이 없고 else도 생략이 되어 있다면 null 값으로 리턴한다.
2. 조건에 따른 결과 값 return 방식
case when (조건1) then (결과 값1)
when (조건2) then (결과 값2)
...
else (결과 값n) end ;
ex)
case when num < 0 then '음수'
when num > -1 then '양수'
...
else 'unknown' end ;
변수가 조건절에 들어가면서 비교 연산자를 선택할 수 있다.
decode (oracle only)
decode문의 경우 오라클에서만 사용할 수 있는 비표준 함수이다. 오라클에서 조건이 복잡할 경우에는 case문을 사용하도록 하겠지만 조건이 그다지 복잡하지 않다면 깔끔하게 decode를 사용해도 좋은 방법이다. 프로그래밍에서는 if else와 비슷한 기능을 수행한다.
DECODE(컬럼, 조건1 , 결과1, 조건2, 결과2, ... )
ex)
DECODE(GENDER, '1' , '남자', '2' ,'여자', 'ETC' )
반응형
'BigData TIL > Database' 카테고리의 다른 글
[Oracle] group by, having절 (0) | 2022.01.10 |
---|---|
[Oracle] NVL, NVL2 (0) | 2022.01.07 |
[Oracle] JOIN 정리 (0) | 2022.01.05 |
[Oracle] UNION , UNION ALL - SELECT 합치기 (0) | 2022.01.04 |
[Oracle] 서브쿼리 (0) | 2022.01.03 |