조건문_DECODE, CASE WHEN

만약 사원들의 1년치 연봉을 알고 싶다면 SALARY 컬럼에 12를 곱하면 될 것이다. 

 

그러나 직급에 따라 연봉 인상률을 달리 가져가고 싶다고 하면 그때는 어떡할 것인가?

그때 쓸 수 있는 것이 조건문이다. 

 

DECODE는 이렇게 생겼다. JOB ID가 이것이면, 이것을 하고, 저것이면, 저것을 하고... 하는 식으로 끊임없이 조건을 달다가, 이도저도 아니면, 이렇게 하자고 하고 괄호를 닫는다. 

SELECT last_name, job_id, salary
      ,DECODE(job_id, 'AD_VP' , salary * 1.3 
                    , 'AC_MGR', salary * 1.25 
                    , 'SA_REP', salary * 1.2
                              , salary * 1.1) AS NEW_SAL
  FROM employees ;

 

똑같은 결과를 CASE WHEN을 통해서도 구현할 수 있다. 

SELECT last_name, job_id, salary
      ,CASE job_id WHEN 'AD_VP'  THEN salary * 1.3 
                   WHEN 'AC_MGR' THEN salary * 1.25 
                   WHEN 'SA_REP' THEN salary * 1.2
                                 ELSE salary * 1.1
       END AS NEW_SAL
  FROM employees ;

 

 

뭘 써도 상관은 없지만 CASE WHEN은 한가지 특장점이 있는데, 그건 비교하는 문장을 사용할 수 있다는 것이다.

SELECT last_name, salary
      ,CASE WHEN salary >= 20000 THEN '상'
            WHEN salary >= 10000 THEN '중'
                                 ELSE '하'
       END AS 구분
  FROM employees ;

이렇게 뭔가 등급을 정해줄 수도 있다

 

DB안에서 피벗테이블처럼 보여주고 싶다면 이런 방식을 사용할 수도 있다.

 

'근거 있는 일하기_SQL' 카테고리의 다른 글

OUTER JOIN 쓸 때 ON과 WHERE에 주는 조건 차이 주의  (0) 2024.05.04
JOIN  (0) 2024.04.20
오라클 날짜는 항상 시분초를 달고다닌다  (0) 2024.04.19
ROLLUP  (0) 2024.04.19
GROUP BY A, B  (0) 2024.04.19