SQL/[프로그래머스]
[Level 4] 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기
hyunnn_00
2024. 4. 2. 13:41
https://school.programmers.co.kr/learn/courses/30/lessons/284528
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
1. 문제에 쓰여있지는 않지만, HR_GRADE 테이블의 HALF_YEAR 열의 1과 2의 평균을 내어 점수 계산해야 함.
2. CASE WHEN 구문을 이용하여 GRADE 컬럼과 BONUS 컬럼 생성
SELECT EMP.EMP_NO,
EMP.EMP_NAME,
CASE
WHEN SCORE >= 96 THEN 'S'
WHEN SCORE >= 90 THEN 'A'
WHEN SCORE >= 80 THEN 'B'
ELSE 'C' END AS 'GRADE',
CASE
WHEN SCORE >= 96 THEN ROUND(EMP.SAL * 0.2)
WHEN SCORE >= 90 THEN ROUND(EMP.SAL * 0.15)
WHEN SCORE >= 80 THEN ROUND(EMP.SAL * 0.1)
ELSE 0 END AS 'BONUS'
FROM HR_EMPLOYEES EMP
LEFT JOIN (SELECT
EMP_NO, AVG(SCORE) AS SCORE
FROM
HR_GRADE
GROUP BY
EMP_NO) GDE ON EMP.EMP_NO = GDE.EMP_NO
ORDER BY EMP.EMP_NO
풀이2
1. AVG_SCORE의 임시테이블 T1 만들기
ㄴ EMP_NO별로 GROUP BY 하여 SCORE의 평균 구하기
2. HR_EMPLOYEES 테이블과 T1 테이블을 조인하고, AVG_SCORE 별로 CASE WHEN 구문 조건 걸어서 GRADE 컬럼과 BONUS 컬럼 만들기
WITH T1 AS (
SELECT EMP_NO, AVG(SCORE) AS AVG_SCORE
FROM HR_GRADE
GROUP BY EMP_NO
)
SELECT T1.EMP_NO,
EMP_NAME,
CASE WHEN T1.AVG_SCORE >= 96 THEN 'S'
WHEN T1.AVG_SCORE >= 90 THEN 'A'
WHEN T1.AVG_SCORE >= 80 THEN 'B'
ELSE 'C' END AS 'GRADE',
CASE WHEN T1.AVG_SCORE >= 96 THEN SAL*0.2
WHEN T1.AVG_SCORE >= 90 THEN SAL*0.15
WHEN T1.AVG_SCORE >= 80 THEN SAL*0.1
ELSE 0 END AS 'BONUS'
FROM HR_EMPLOYEES
LEFT JOIN T1 ON HR_EMPLOYEES.EMP_NO = T1.EMP_NO