Skills/SQL

프로그래머스: 조건에 맞는 사원 정보 조회하기 (MySQL)

듀공🥕 2024. 3. 9. 22:04

 

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