https://school.programmers.co.kr/learn/courses/30/lessons/284528
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
나의 풀이
1. 문제에 쓰여있지는 않지만, HR_GRADE 테이블의 HALF_YEAR 열의 1과 2의 평균을 내어 점수 계산해야 함.
2. CASE WHEN 구문을 이용하여 GRADE 컬럼과 BONUS 컬럼 생성
SELECT EMP.EMP_NO,
EMP.EMP_NAME,
CASE
WHEN SCORE >= 96 THEN 'S'
WHEN SCORE >= 90 THEN 'A'
WHEN SCORE >= 80 THEN 'B'
ELSE 'C' END AS 'GRADE',
CASE
WHEN SCORE >= 96 THEN ROUND(EMP.SAL * 0.2)
WHEN SCORE >= 90 THEN ROUND(EMP.SAL * 0.15)
WHEN SCORE >= 80 THEN ROUND(EMP.SAL * 0.1)
ELSE 0 END AS 'BONUS'
FROM HR_EMPLOYEES EMP
LEFT JOIN (SELECT
EMP_NO, AVG(SCORE) AS SCORE
FROM
HR_GRADE
GROUP BY
EMP_NO) GDE ON EMP.EMP_NO = GDE.EMP_NO
ORDER BY EMP.EMP_NO
풀이2
1. AVG_SCORE의 임시테이블 T1 만들기
ㄴ EMP_NO별로 GROUP BY 하여 SCORE의 평균 구하기
2. HR_EMPLOYEES 테이블과 T1 테이블을 조인하고, AVG_SCORE 별로 CASE WHEN 구문 조건 걸어서 GRADE 컬럼과 BONUS 컬럼 만들기
WITH T1 AS (
SELECT EMP_NO, AVG(SCORE) AS AVG_SCORE
FROM HR_GRADE
GROUP BY EMP_NO
)
SELECT T1.EMP_NO,
EMP_NAME,
CASE WHEN T1.AVG_SCORE >= 96 THEN 'S'
WHEN T1.AVG_SCORE >= 90 THEN 'A'
WHEN T1.AVG_SCORE >= 80 THEN 'B'
ELSE 'C' END AS 'GRADE',
CASE WHEN T1.AVG_SCORE >= 96 THEN SAL*0.2
WHEN T1.AVG_SCORE >= 90 THEN SAL*0.15
WHEN T1.AVG_SCORE >= 80 THEN SAL*0.1
ELSE 0 END AS 'BONUS'
FROM HR_EMPLOYEES
LEFT JOIN T1 ON HR_EMPLOYEES.EMP_NO = T1.EMP_NO
'SQL > [프로그래머스]' 카테고리의 다른 글
[Level 2] 조건에 맞는 개발자 찾기(★) (1) | 2024.04.19 |
---|---|
[LEVEL 3] 대장균들의 자식의 수 구하기 (0) | 2024.04.02 |
[Level3] 대장균의 크기에 따라 분류하기 1 (0) | 2024.04.02 |
[SQL][프로그래머스] 저자 별 카테고리 별 매출액 집계하기 (0) | 2023.08.25 |
[SQL][프로그래머스] 주문량이 많은 아이스크림들 조회하기 (0) | 2023.08.19 |