[Programmers/MySQL] 284528: 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기

songeunm·2024년 8월 26일

PS - sql

목록 보기
1/58
post-thumbnail

문제

Lv.4 / GROUP BY

문제 흐름

테이블이 3개 주어지긴 했지만 사용할 테이블은 HR_EMPLOYEESHR_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
;

마무리

특별히 어려웠던 점은 없었다. 오랜만에 짜는 쿼리문이라 어색한 감은 있었지만..
사실은 더 어려운 문제 잡았다가 꼬리 내리고 난이도를 낮췄다. ㅎㅎ..
꾸준히 하는게 중요한 것!

profile
데굴데굴 구르는 개발자 지망생

0개의 댓글