본문 바로가기

SQL

[MYSQL] WITH, JOIN, CASE, 집계 함수

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