https://school.programmers.co.kr/learn/courses/30/lessons/284528
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
WITH AVG_GRADE AS (
SELECT EMP_NO
, AVG(SCORE) AS AVG_SCORE
FROM HR_GRADE
GROUP BY EMP_NO
)
SELECT EMP_NO
, EMP_NAME
, CASE
WHEN G.AVG_SCORE >= 96 THEN 'S'
WHEN G.AVG_SCORE >= 90 THEN 'A'
WHEN G.AVG_SCORE >= 80 THEN 'B'
ELSE 'C' END AS GRADE
, CASE
WHEN G.AVG_SCORE >= 96 THEN E.SAL * 0.20
WHEN G.AVG_SCORE >= 90 THEN E.SAL * 0.15
WHEN G.AVG_SCORE >= 80 THEN E.SAL * 0.10
ELSE 0 END AS BONUS
FROM HR_DEPARTMENT AS D
NATURAL JOIN HR_EMPLOYEES AS E
NATURAL JOIN AVG_GRADE AS G
ORDER BY EMP_NO
WITH 함수를 이용하여 기존 HR_GRADE 테이블을 수정한 새로운 AVG_GRADE 테이블을 생성했다.
(EMP_ID로 그룹화를 한 다음 두 분기 SCORE의 평균을 낸 AVG_SCORE 칼럼을 생성)
그 다음 세 개의 테이블을 JOIN 한 후, AVG_SCORE 값을 기준으로 CASE 문을 이용해서 문제에서 요구하는 두 칼럼을 생성했다.
'SQL' 카테고리의 다른 글
[MYSQL] MAX 주의사항 (0) | 2024.08.07 |
---|---|
[MYSQL] UNION, DATE_FORMAT (0) | 2024.08.04 |
[MYSQL] 3개의 테이블 JOIN (0) | 2024.08.04 |
[MYSQL] PERCENT_RANK() (0) | 2024.08.04 |
[MYSQL] WITH, RANK, PARTITION BY (0) | 2024.07.30 |