[프로그래머스/MYSQL] 조건에 맞는 사원 정보 조회하기, 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기

NOO·2024년 4월 5일
0

CODING TEST - SQL

목록 보기
4/5

👋😊 인사

안녕하세요
매우 오랜만입니다
손 풀겸 SQL로 찾아왔습니다.

📍[Lv.2] 조건에 맞는 사원 정보 조회하기

🔗 문제 링크

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

🛠️ 문제 풀이

  1. HR_GRADE 테이블에서 2022년도 한해 평가 점수가 가장 높은 사원 정보를 조회합니다.
    참고로 저는 정렬 후, LIMIT 1을 썼습니다.
WITH TMP AS (
    SELECT EMP_NO
            ,SUM(SCORE) SCORE
    FROM HR_GRADE G
    WHERE G.YEAR = 2022
    GROUP BY EMP_NO
    ORDER BY SCORE DESC 
    LIMIT 1
)
  1. 해당 사원의 정보를 조회합니다.
SELECT SCORE
        ,E.EMP_NO
        ,EMP_NAME
        ,POSITION
        ,EMAIL
FROM HR_EMPLOYEES E INNER JOIN TMP T
    ON E.EMP_NO = T.EMP_NO

👾 소스 코드

WITH TMP AS (
    SELECT EMP_NO
            ,SUM(SCORE) SCORE
    FROM HR_GRADE G
    WHERE G.YEAR = 2022
    GROUP BY EMP_NO
    ORDER BY SCORE DESC 
    LIMIT 1
)
SELECT SCORE
        ,E.EMP_NO
        ,EMP_NAME
        ,POSITION
        ,EMAIL
FROM HR_EMPLOYEES E INNER JOIN TMP T
    ON E.EMP_NO = T.EMP_NO;

📍[Lv.4] 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기

🔗 문제 링크

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

🛠️ 문제 풀이

  1. 사원별 평가점수별 등급을 설정합니다.
WITH EMP_SCORE 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
)
  1. 그에 맞는 성과금을 조회합니다.
SELECT E.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 END BONUS
FROM HR_EMPLOYEES E INNER JOIN EMP_SCORE S
    ON E.EMP_NO = S.EMP_NO
ORDER BY E.EMP_NO;

👾 소스 코드

WITH EMP_SCORE 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 E.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 END BONUS
FROM HR_EMPLOYEES E INNER JOIN EMP_SCORE S
    ON E.EMP_NO = S.EMP_NO
ORDER BY E.EMP_NO;

🌅 마무리

🤔 어떤 문제가 있었고 어떻게 해결했나요?

  1. 이번 문제들은 큰 어려움 없이 다 해결했습니다.
  2. 오히려 같은 문제 라인 중에 [Lv.2] 노선별 평균 역 사이 거리 조회하기에서 좀 더 시간을 쓴 거 같습니다.(concat을 통해 number 값을 string으로 바꿔놓고 왜 자꾸 틀렸지? 이러고 있었습니다ㅎ)

👋😊 인사

To. 프로그래머스

좀 더 강한 문제들로 가지고 오도록.

내일은 알고리즘으로 찾아오겠습니다.
부족한 글 읽어주셔서 감사합니다.
잘못된 부분 혹은 개선할만한 부분에 대한 댓글 항상 환영합니다.

profile
ᐕ) ⁾⁾

0개의 댓글