230118 SQL 예제2 case

kangjuju·2023년 1월 18일
0

Acorn

목록 보기
6/15
post-thumbnail

문제1) 5년 이상 근무하면 '감사합니다', 그 외는 '열심히' 라고 표현 ( 2010 년 이후 직원만 참여 )
특별수당(pay를 기준) : 5년 이상 5%, 나머지 3% (정수로 표시:반올림)

SELECT jikwon_name AS 직원명, TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) AS 근무년수,
case 
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 5 then '감사합니다'
ELSE '열심히' END AS 표현,
case 
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 5 then ROUND(jikwon_pay * 0.05)
ELSE ROUND(jikwon_pay * 0.03) END AS 특별수당
FROM jikwon WHERE jikwon_ibsail >= '2010-1-1';

문제2) 입사 후 8년 이상이면 왕고참, 5년 이상이면 고참, 3년 이상이면 보통, 나머지는 일반으로 표현

SELECT jikwon_name 직원명,jikwon_jik 직급,
DATE_FORMAT(jikwon_ibsail,'%Y.%m.%d') 입사년월일,
case
when (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(jikwon_ibsail,'%Y')) >= 10 then '왕고참'
when (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(jikwon_ibsail,'%Y')) >= 10 then '고참'
when (DATE_FORMAT(NOW(),'%Y')-DATE_FORMAT(jikwon_ibsail,'%Y')) >= 10 then '보통'
ELSE '일반' END 구분,
case
when buser_num = 10 then '총무부'
when buser_num = 20 then '영업부'
when buser_num = 30 then '전산부'
when buser_num = 40 then '관리부'
END 부서
FROM jikwon;

-----내가 쓴 답안 ---
SELECT jikwon_name AS 직원명, jikwon_jik AS 직급, jikwon_ibsail AS 입사년월일,
case
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 8 then '왕고참'
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 5 then '고참'
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 3 then '보통'
ELSE '일반' END AS 구분,
case
when buser_num = 10 then '총무부'
when buser_num = 20 then '영업부'
when buser_num = 30 then '전산부'
when buser_num = 40 then '관리부'
END 부서 FROM jikwon;

문제3)
각 부서번호별로 실적에 따라 급여를 다르게 인상하려 한다.
pay를 기준으로 10번은 10%, 30번은 20% 인상하고 나머지 부서는 동결한다.
8년 이상 장기근속을 O,X로 표시 , 금액은 정수만 출력(반올림)

SELECT jikwon_no 사번,jikwon_name 직원명,buser_num 부서,jikwon_pay 연봉,
case
when buser_num=10 then ROUND(jikwon_pay + jikwon_pay*0.1)
when buser_num=30 then ROUND(jikwon_pay + jikwon_pay*0.2)
ELSE jikwon_pay
END 인상연봉,
case 
when TIMESTAMPDIFF(YEAR,jikwon_ibsail,NOW()) >= 8 then 'O'
ELSE 'X'
END 장기근속
FROM jikwon;

0개의 댓글