
Lv.4 / GROUP BY
테이블이 3개 주어지긴 했지만 사용할 테이블은 HR_EMPLOYEES와 HR_GRADE 2개이다.
일단 HR_GRADE 테이블을 보면 HALF_YEAR라는 컬럼을 통해 연도가 다시 분기로 나누어져있다.
"사원별"로 성과금을 조회해야하기 때문에 분기별 평가 점수를 어떻게 합치나, 잠깐 생각했다.
문제에는 나와있지 않은데 그냥 평균으로.. 집계했다.
이렇게 결정했다면 첫번째로 구해야 할 건 사원(사원번호)별 평가등급이다.
평가등급은 사원별 평균 평가 점수를 CASE문을 통해 각 등급으로 변환해주는 작업을 통해 진행했다.
그리고 이 사원별 평가등급을 다시 연봉과 연결해서 성과금을 계산해주어야한다.
이전에 구한 사원별 평가등급을 사원정보와 LEFT JOIN하고, CASE문을 통해 평가등급에 따라 연봉에 주어진 각 비율을 곱해 계산하도록 했다.
-- 사번(HR_EMPLOYEES.EMP_NO/HR_GRADE.EMP_NO)
-- 성명(HR_EMPLOYEES.EMP_NAME)
-- 평가등급(HR_GRADE.SCORE)
-- 성과금-> 연봉(HR_EMPLOYEES.SAL)*비율
SELECT EMP_NO, EMP_NAME, GRADE,
CASE
WHEN GRADE = 'S' THEN SAL*0.2
WHEN GRADE = 'A' THEN SAL*0.15
WHEN GRADE = 'B' THEN SAL*0.1
ELSE SAL*0
END AS BONUS
FROM (SELECT emp_no, CASE
WHEN avg(score) >= 96 THEN "S"
WHEN avg(score) >= 90 THEN "A"
WHEN avg(score) >= 80 THEN "B"
ELSE "C"
END AS "GRADE"
FROM HR_GRADE
GROUP BY 1) AS ADD_GRADE LEFT JOIN HR_EMPLOYEES
USING (EMP_NO)
ORDER BY 1
;
특별히 어려웠던 점은 없었다. 오랜만에 짜는 쿼리문이라 어색한 감은 있었지만..
사실은 더 어려운 문제 잡았다가 꼬리 내리고 난이도를 낮췄다. ㅎㅎ..
꾸준히 하는게 중요한 것!