https://school.programmers.co.kr/learn/courses/30/lessons/284528
HR_GRADE
테이블에서 점수가 분기별로 나타나 있어 같은 EMP_NO
가 2번씩 나오기 때문에 AVG()
를 사용해야 하고, GROUP_BY
를 통해 중복을 제거한다.
WITH GRADE AS (
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
EMP_NO
),
BONUS_INFO AS (
SELECT
G.EMP_NO,
G.GRADE,
E.EMP_NAME,
CASE
WHEN G.GRADE = 'S' THEN E.SAL * 0.2
WHEN G.GRADE = 'A' THEN E.SAL * 0.15
WHEN G.GRADE = 'B' THEN E.SAL * 0.1
ELSE 0
END AS BONUS
FROM
GRADE G
JOIN
HR_EMPLOYEES E ON G.EMP_NO = E.EMP_NO
)
SELECT
EMP_NO,
EMP_NAME,
GRADE,
BONUS
FROM
BONUS_INFO
ORDER BY
EMP_NO