본문 바로가기
Skills/SQL

[프로그래머스] SQL - '연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기' 문제풀이

by 602yu 2024. 4. 23.

 

 

 

문제 링크입니다.

https://school.programmers.co.kr/learn/courses/30/lessons/284528

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

 

문제 설명

 

 

 

 

문제

 

HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블을 이용해 사원별 성과금 정보를 조회하려합니다. 평가 점수별 등급과 등급에 따른 성과금 정보가 아래와 같을 때, 사번, 성명, 평가 등급, 성과금을 조회하는 SQL문을 작성해주세요.

평가등급의 컬럼명은 GRADE로, 성과금의 컬럼명은 BONUS로 해주세요.
결과는 사번 기준으로 오름차순 정렬해주세요.

 

 

 

풀이1 - WITH 절 사용
WITH EMP_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',
        CASE 
            WHEN AVG(SCORE) >= 96 THEN 0.2
            WHEN AVG(SCORE) >= 90 THEN 0.15
            WHEN AVG(SCORE) >= 80 THEN 0.1
            ELSE 0
        END AS 'BONUS_PER'
    FROM HR_GRADE
    GROUP BY EMP_NO
)

SELECT E.EMP_NO,
    E.EMP_NAME,
    G.GRADE,
    (E.SAL * G.BONUS_PER) AS 'BONUS'
FROM HR_EMPLOYEES AS E
    INNER JOIN EMP_GRADE AS G ON G.EMP_NO = E.EMP_NO
ORDER BY E.EMP_NO

 


   1.  상, 하반기 평균점수를 구하는 WITH 절 생성
   2.  CASE WHEN 구문으로 상, 하반기 평균 점수에 따라 평가등급과 성과금 비율 부여
   3.  (2)의 WITH 절과 평가자 테이블을 JOIN하여 정보 조회

 

이를 통해 각 직원의 평가 등급과 보너스가 포함된 최종 결과를 얻을 수 있습니다.