해당 문제는 Programmers에서 사용한 문제이며 모든 테이블의 자료와 출처는 Programmers임을 밝힙니다.
해당 글에서는 CASE와 GROUP BY를 이용하여 푸는 문제로 초보자가 하기에는 보통 정도의 난이도를 가지고 있는 것 같습니다.
해당 문제 원본을 확인 하시려면 해당 사이트를 들어가시면 될 것 같습니다.
시작하겠습니다.
HR_DEPARTMENT, HR_EMPLOYEES, HR_GRADE 테이블을 이용해 사원별 성과금 정보를 조회하려합니다. 평가 점수별 등급과 등급에 따른 성과금 정보가 아래와 같을 때, 사번, 성명, 평가 등급, 성과금을 조회하는 SQL문을 작성해주세요.
평가등급의 컬럼명은 GRADE로, 성과금의 컬럼명은 BONUS로 해주세요.결과는 사번 기준으로 오름차순 정렬해주세요.
이 문제는 평가등급을 설정할 기준 점수를 어떤 식으로 집계하라는 말이 없어서 저는 해당 문제에서 약간의 시간을 허비했습니다.... 기준점수를 집계하는 방법은 바로 평균을 구하고 그 평균에 따라서 평가 등급을 설정해주시면 됩니다.
그럼 정말 쉽게 CASE 문만 생각 하면 되는 문제라 쉽게 풀릴 것입니다.
1. 등급 설정하기
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
FROM HR_GRADE
GROUP BY EMP_NO
CASE문과 GROUP BY를 활용하여 평균 SCORE를 기준으로 등급을 매겨주면 각각의 사원번호에 해당하는 등급이 설정 됩니다.
이제 해당 테이블을 JOIN을 통해 연결해주면 될 것 같습니다.
2. JOIN을 이용하여 HR_EMPLOYEES 테이블과 연결하기
SELECT *
FROM (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
FROM HR_GRADE
GROUP BY EMP_NO) a
JOIN
HR_EMPLOYEES e ON a.EMP_NO = e.EMP_NO
JOIN을 통해 연결 한 뒤 테이블 확인 결과 각 사원마다 등급(GRADE)이 설정된 것을 확인 할 수 있습니다.
그리고 저희가 사용할 컬럼들이 확보 된 것 또한 확인 가능합니다.
3. SELECT 절에 CASE문을 사용하여 조건에 맞게 설정
SELECT e.EMP_NO
, e.EMP_NAME
, a.GRADE
, CASE
WHEN a.GRADE = 'S' THEN e.SAL * 0.2
WHEN a.GRADE = 'A' THEN e.SAL * 0.15
WHEN a.GRADE = 'B' THEN e.SAL * 0.1
ELSE 0
END AS BONUS
FROM (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
FROM HR_GRADE
GROUP BY EMP_NO) a
JOIN
HR_EMPLOYEES e ON a.EMP_NO = e.EMP_NO
ORDER BY EMP_NO
이렇게 CASE문을 활용하여 등급을 조건으로 걸고 해당 등급에 맞는 조건이 확인 되면 그에 맞는 성과금을 측정해 출력해주도록 만들어 주었습니다.
그리고 마지막으로 조건에 맞는 정렬을 넣어주면 해당 코드는 정답이 됩니다!!
저는 뭔가 LEVEL 3보다 LEVEL 4가 좀 더 쉽게 느껴졌습니다...ㅎㅎ
이상으로 Programmers 문제 풀이를 마치도록 하겠습니다.
'Data Analyst > SQL' 카테고리의 다른 글
[SQL] Programmers 문제 풀기(년, 월, 성별 별 상품 구매 회원 수 구하기) (0) | 2024.11.05 |
---|---|
[SQL] Programmers 문제 풀기(업그레이드 할 수 없는 아이템 구하기) (0) | 2024.11.04 |
[SQL] Programmers 문제 풀기(저자 별 카테고리 별 매출액 집계하기) (0) | 2024.10.31 |
[SQL] Programmers 문제 풀기(즐겨찾기가 가장 많은 식당 정보 출력하기) (0) | 2024.10.30 |
[SQL] Programmers 문제 풀기 (자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기) (0) | 2024.10.30 |