1. 문제
2. 문제 풀기 전에,
- HR_DEPARTMENT 👉🏻 X
- HR_EMPLOYEES 👉🏻 사번, 성명, 직책, 이메일
- HR_GRADE 👉🏻 점수 합계
- 상, 하반기 접수 합계가 가장 높은 사원 정보 조회하기
- 점수 합계 DESC (=점수 높은 순으로)
3. 테이블
HR_DEPARTMENT AS DEPT
HR_EMPLOYEES AS EMP
HR_GRADE AS GR
4. 풀이 과정
1단계) 테이블 DEPT와 테이블 EMP는 DEPT_ID라는 공통 컬럼을 가지고 있고, 테이블EMP와 테이블 GR은 EMP_NO라는 공통 컬럼을 가지고 있다.
이 세 테이블을 연결하여 쿼리문을 작성해야 하니 INNER JOIN을 해준다.
SELECT
FROM HR_DEPARTMENT AS DEPT
INNER JOIN HR_EMPLOYEES AS EMP ON DEPT.DEPT_ID = EMP.DEPT_ID
INNER JOIN HR_GRADE AS GRADE ON EMP.EMP_NO = GRADE.EMP_NO
2단계) 사원들의 점수, 사번, 성명, 직책, 이메일을 조회하는 SELECT문을 작성해 준다.
SELECT GRADE.SCORE,
EMP.EMP_NO,
EMP.EMP_NAME,
EMP.POSITION,
EMP.EMAIL
FROM HR_DEPARTMENT AS DEPT
INNER JOIN HR_EMPLOYEES AS EMP ON DEPT.DEPT_ID = EMP.DEPT_ID
INNER JOIN HR_GRADE AS GRADE ON EMP.EMP_NO = GRADE.EMP_NO
3단계) 테이블 GR에는 동일한 사번으로 상, 하반기(HALF_YEAR=1,2) 점수가 나누어져 있기 때문에 GROUP BY절을 통해 사번을 기준으로 그룹화하고, SUM을 통해 점수 합계를 구하여 SCORE로 정의해 준다.
SELECT SUM(GRADE.SCORE) AS SCORE,
EMP.EMP_NO,
EMP.EMP_NAME,
EMP.POSITION,
EMP.EMAIL
FROM HR_DEPARTMENT AS DEPT
INNER JOIN HR_EMPLOYEES AS EMP ON DEPT.DEPT_ID = EMP.DEPT_ID
INNER JOIN HR_GRADE AS GRADE ON EMP.EMP_NO = GRADE.EMP_NO
GROUP BY EMP_NO
4단계) ORDER BY절과 LIMIT를 이용하여 상, 하반기 접수의 합이 가장 높은 사원 1명의 정보를 조회해 준다.
SELECT SUM(GRADE.SCORE) AS SCORE,
EMP.EMP_NO,
EMP.EMP_NAME,
EMP.POSITION,
EMP.EMAIL
FROM HR_DEPARTMENT AS DEPT
INNER JOIN HR_EMPLOYEES AS EMP ON DEPT.DEPT_ID = EMP.DEPT_ID
INNER JOIN HR_GRADE AS GRADE ON EMP.EMP_NO = GRADE.EMP_NO
GROUP BY EMP_NO
ORDER BY SCORE DESC
LIMIT 1;
5. 완성 코드
SELECT SUM(GRADE.SCORE) AS SCORE,
EMP.EMP_NO,
EMP.EMP_NAME,
EMP.POSITION,
EMP.EMAIL
FROM HR_DEPARTMENT AS DEPT
INNER JOIN HR_EMPLOYEES AS EMP ON DEPT.DEPT_ID = EMP.DEPT_ID
INNER JOIN HR_GRADE AS GRADE ON EMP.EMP_NO = GRADE.EMP_NO
GROUP BY EMP_NO
ORDER BY SCORE DESC
LIMIT 1;
🔗 관련 링크
프로그래머스 문제 - https://school.programmers.co.kr/learn/courses/30/lessons/284527
주문량이 많은 아이스크림 조회하기 - https://justinaofjune.tistory.com/48
728x90
'Skills > SQL' 카테고리의 다른 글
프로그래머스: 노선별 평균 역 사이 거리 조회하기 (MySQL) (1) | 2024.03.12 |
---|---|
프로그래머스: 연도별 평균 미세먼지 농도 조회하기 (MySQL) (1) | 2024.03.12 |
프로그래머스: ROOT 아이템 구하기 (MySQL) (1) | 2024.03.09 |
프로그래머스: 조건에 맞는 개발자 구하기 (MySQL) (0) | 2024.03.08 |
프로그래머스: 업그레이드 된 아이템 구하기 (MySQL) (0) | 2024.03.07 |