우당탕탕 개발일지
[SQL] 프로그래머스 GROUP BY : 연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기 (level 4) 본문
💡문제 링크
💡SQL 코드 설계
HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블을 이용해 사원별 성과금 정보를 조회하려합니다. 평가 점수별 등급과 등급에 따른 성과금 정보가 아래와 같을 때, 사번, 성명, 평가 등급, 성과금을 조회하는 SQL문을 작성해주세요. 평가등급의 컬럼명은 GRADE로, 성과금의 컬럼명은 BONUS로 해주세요. 결과는 사번 기준으로 오름차순 정렬해주세요.
1. HR_GRADE 테이블의 SCORE의 값에 따라 GRADE가 나뉘기 때문에, SELECT절에 CASE WHEN 함수를 사용해서 GRADE열을 만든다.
2. HR_GRADE 테이블의 SCORE의 값에 따라 BONUS로 줄 돈의 %가 나뉘기 때문에, SELECT절에 CASE WHEN 함수를 사용해서 BONUS열을 만든다.
3. 상반기, 하반기의 평균 점수를 바탕으로 GRADE를 결정하기 때문에 평균 점수를 나타내는 테이블을 새로 만들어야 한다.
💡SQL 코드
SELECT E.EMP_NO, E.EMP_NAME,
CASE
WHEN G.SCORE >= 96 THEN "S"
WHEN G.SCORE >= 90 THEN "A"
WHEN G.SCORE >= 80 THEN "B"
ELSE "C"
END AS GRADE,
CASE
WHEN G.SCORE >= 96 THEN E.SAL * 0.2
WHEN G.SCORE >= 90 THEN E.SAL * 0.15
WHEN G.SCORE >= 80 THEN E.SAL * 0.1
ELSE 0
END AS BONUS
FROM HR_EMPLOYEES AS E
JOIN (
SELECT EMP_NO, AVG(SCORE) AS SCORE
FROM HR_GRADE
GROUP BY EMP_NO
) AS G
ON E.EMP_NO = G.EMP_NO
# SELECT C.CAR_ID, C.CAR_TYPE, ROUND(30*C.DAILY_FEE*(100-P.DISCOUNT_RATE)*0.01) AS FEE
# FROM CAR_RENTAL_COMPANY_CAR AS C
# JOIN CAR_RENTAL_COMPANY_RENTAL_HISTORY H
# ON C.CAR_ID = H.CAR_ID
# JOIN CAR_RENTAL_COMPANY_DISCOUNT_PLAN P
# ON C.CAR_TYPE = P.CAR_TYPE
# WHERE C.CAR_ID NOT IN (
# select car_id
# from car_rental_company_rental_history
# where start_date <= '2022-11-30' and end_date > '2022-11-01'
# ) AND P.DURATION_TYPE = '30일 이상'
# GROUP BY C.CAR_ID
# HAVING C.CAR_TYPE IN ('세단', 'SUV') AND (FEE >= 500000 AND FEE <= 2000000)
# ORDER BY FEE DESC, C.CAR_TYPE, C.CAR_ID DESC
💡기억할 내용
1. GRADE 열을 CASE WHEN으로 만든 다음에 이후 CASE WHEN문에서 GRADE를 바로 쓸 수 없다. 초반에 아래처럼 써서 실패했다.
SELECT E.EMP_NO, E.EMP_NAME,
CASE
WHEN G.SCORE >= 96 THEN "S"
WHEN G.SCORE >= 90 THEN "A"
WHEN G.SCORE >= 80 THEN "B"
ELSE "C"
END AS GRADE,
CASE
WHEN GRADE = "S" THEN E.SAL * 0.2
WHEN GRADE = "A" THEN E.SAL * 0.15
WHEN GRADE = "B" THEN E.SAL * 0.1
ELSE 0
END AS BONUS
'SQL' 카테고리의 다른 글
[SQL] 프로그래머스 GROUP BY : 입양 시각 구하기(2)(level 4) (0) | 2025.01.04 |
---|---|
[SQL] 프로그래머스 GROUP BY : 년, 월, 성별 별 상품 구매 회원 수 구하기 (level 4) (1) | 2025.01.03 |
[SQL] 프로그래머스 JOIN : 보호소에서 중성화한 동물(level 4) - 2회차 복습 완료 (0) | 2024.09.29 |
[SQL] 프로그래머스 String, Date : 자동차 대여 기록 별 대여 금액 구하기(level 4) - 2회차 복습 완료 (1) | 2024.09.27 |
[SQL] 프로그래머스 GROUP BY :연간 평가점수에 해당하는 평가 등급 및 성과금 조회하기(level 4) - 2회차 복습 완료 (0) | 2024.07.05 |