본문 바로가기

DataBase

[Oracle] 급여에 따라 급여 인상율 다르게 적용하기 (decode, case, sign)

emp 테이블에서 연봉(sal)이 1000미만이면 0.8% 인상, 1000~2000이면 0.5%, 2000~3000이면 0.3%, 그 이상은 0.1%인상되었을 때, emp 테이블의 ename, sal(인상 전 급여), 인상 후 급여를 출력하시오.
 

먼저 emp 테이블에서 ename과 sal을 출력해보자

select ename, sal from emp;

여기에서 구간을 나눠서 급여인상율을 다르게 적용하자
sal < 1000 0.8%인상, 1000~2000 0.5%, 2001~3000 0.3%, 그 외는 0.1% 인상

 

① 급여에 따라 급여 인상율 다르게 적용하기 - decode

 
decode..,,날 아주 혼란스럽게 만드는 녀석,,,,,후
차근차근 정리를 해봅시당

decode(컬럼, 조건1, 결과1, 조건2, 결과2, ..., 조건n, 결과n, 결과)

(예)
decode(gender, 'f', '여', 'm', '남', '기타') 성별

 
그리고 이 문제를 풀려면 알아야 하는 sign함수 (숫자 비교할 때 자주 사용될 듯..?)

sign(양수) => 1 출력
sign(0)   => 0 출력
sign(음수) => -1 출력

 

select ename, sal "인상 전 급여",
    decode(sign(sal-1000),
                -1, sal*1.08,
                 0, sal*1.08,
                 1, decode(sign(sal-2000),
                                -1, sal*1.05,
                                 0, sal*1.05,
                                 1, decode(sign(sal-3000),
                                                -1, sal*1.03,
                                                 0, sal*1.03,
                                                 1, sal*1.01))) "인상 후 급여"                
from emp;

 
sal과 인상율 범위의 차를 기준으로 나누어서 sal이 인상 범위(1000,2000,3000)보다 큰 경우에는 또 범위를 나누어서 값을 설정해주어야 했기 때문에 decode안에 또 decode가 들어가는....아주 지독한 녀석을 만들어야만 했다..,

 
 

② 급여에 따라 급여 인상율 다르게 적용하기 - case

case는 조건에 따라 결과값이 다른 경우에 사용된다.

case
	when 조건1 then 결과1
	when 조건2 then 결과2
	when 조건n then 결과n
	else 결과
end;

 

select ename, sal "인상 전 급여",
    case when sal between 0 and 1000 then sal*1.08
         when sal between 1001 and 2000 then sal*1.05
         when sal between 2001 and 3000 then sal*1.03
         else sal*1.1
    end as "인상 후 급여"
from emp;

참고로 컬럼명에는 띄어쓰기 한 문자열이 들어가려면 큰따옴표("")안에 넣어줘야한다!
 
case가 decode보다 더 쉽게 작성할 수 있고 코드만 봤을 경우에도 가독성이 좋다bb
물론 비교 대상(조건)이 별로 없다면 decode가 더 유용할듯~
 
 


* decode, case 관련 영상
https://www.youtube.com/watch?v=1p8aB506LkU 

 
* case
https://www.w3schools.com/sql/sql_case.asp

 

SQL CASE Expression

W3Schools offers free online tutorials, references and exercises in all the major languages of the web. Covering popular subjects like HTML, CSS, JavaScript, Python, SQL, Java, and many, many more.

www.w3schools.com