SQL 고득점 Kit - 9.11

김동현·2024년 9월 11일

SQL 고득점 Kit

목록 보기
53/56

GROUP BY - 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기

문제

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

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

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

풀이

WITH g_table 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 'GRADE'
    FROM HR_GRADE
    GROUP BY EMP_NO
)

SELECT g.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 0    -- 바보같이 틀린 부분 SAL로 보너스인데 그대로 출력하려고 함
    END 'BONUS'
FROM g_table g
INNER JOIN HR_EMPLOYEES he
ON g.EMP_NO = he.EMP_NO
ORDER BY g.EMP_NO

리뷰

  • 금방 문제를 풀었지만? 계속 제출만하면 오답이었다... (진짜 별의별 생각을 함)
  • 혼자서 조건을 만족하는지 검토하고, SELECT문에서 다르게 타입을 받는 것인가, 다른 사람 풀이까지 봤는데 나와 같은 방식이라 더 고민했다.
  • 그러다가 보너스를 계산하는 과정에서 C등급은 보너스가 없는데 왜 돈을 SAL로 설정한 것을 보고 어이가 없어서 0으로 수정하니 바로 정답...... ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

GitHub

연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기
https://github.com/lasentia/SQL_Study/tree/main/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4/4/284528.%E2%80%85%EC%97%B0%EA%B0%84%E2%80%85%ED%8F%89%EA%B0%80%EC%A0%90%EC%88%98%EC%97%90%E2%80%85%ED%95%B4%EB%8B%B9%ED%95%98%EB%8A%94%E2%80%85%ED%8F%89%EA%B0%80%E2%80%85%EB%93%B1%EA%B8%89%E2%80%85%EB%B0%8F%E2%80%85%EC%84%B1%EA%B3%BC%EA%B8%88%E2%80%85%EC%A1%B0%ED%9A%8C%ED%95%98%EA%B8%B0

profile
'The best way to get started is to quit talking and begin doing.'

0개의 댓글