[프로그래머스 LV.2] 조건에 맞는 사원 정보 조회하기 — MySQL 정답 & 해설

2025. 11. 29. 14:40·코딩테스트/MYSQL

🔗 1. 문제 URL

프로그래머스 문제 바로가기 👉
https://school.programmers.co.kr/learn/courses/30/lessons/284527

 

프로그래머스

SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 


 

📝 2. 문제 요구사항 정리

이 문제는 HR_EMPLOYEES 테이블과
연도별 평가 점수를 담고 있는 HR_GRADE 테이블을 이용해

2022년 평가 점수 합계가 가장 높은 사원 1명을 조회하는 문제입니다.

핵심은 사원별 점수를 모두 합산한 뒤,
그중 가장 높은 점수를 가진 사원을 딱 한 명만 출력하는 것입니다.

✔ 요구사항 요약

  • HR_GRADE 테이블에서 2022년 데이터만 사용
  • 사원별 평가 점수(SCORE)를 SUM으로 합산
  • 점수가 가장 높은 사원 1명 조회
  • 출력 컬럼: SCORE, EMP_NO, EMP_NAME, POSITION, EMAIL

 


 

💡 3. 핵심 개념: 집계 + 서브쿼리 + LIMIT

이 문제의 핵심은 바로 집계함수(SUM) + MAX 처리 구조입니다.

사원별 총점을 구하려면 다음이 필요합니다.

  1. SUM(SCORE) → 사원별 점수 누적
  2. 그중 가장 높은 점수(MAX) 선택

그런데 집계함수는 한 번에 두 개(MAX와 SUM)를 동시에 쓸 수 없으므로,
SUM을 먼저 계산한 뒤,
그 결과에서 최댓값을 뽑는 로직이 필요합니다.

이때 사용하는 방식이 바로 서브쿼리 + ORDER BY + LIMIT 1 입니다.

 
1) 사원별 점수를 SUM으로 계산 2) SUM 결과를 내림차순 정렬 3) LIMIT 1로 최댓값 사원 1명만 선택
 

 

✅ 4. 정답 SQL 코드

SELECT 
    T.TOTALSCORE AS SCORE,
    T.EMP_NO,
    E.EMP_NAME,
    E.POSITION,
    E.EMAIL
FROM HR_EMPLOYEES E
JOIN (
        SELECT 
            SUM(SCORE) AS TOTALSCORE,
            EMP_NO
        FROM HR_GRADE
        WHERE YEAR = 2022
        GROUP BY EMP_NO
     ) T
    ON E.EMP_NO = T.EMP_NO
ORDER BY T.TOTALSCORE DESC
LIMIT 1;

 


 

💬 5. 풀이하면서 느낀 점

평가 점수의 합계를 구해서 가장 높은 총점을 가진 사원을 조회하는 문제였기 때문에
처음에는 자연스럽게 SUM과 MAX가 떠올랐습니다.

하지만 집계 함수를 두 번 동시에 사용할 수는 없기 때문에
SUM으로 사원별 점수를 먼저 집계해야 한다는 점,
그리고 그 결과 중 최댓값을 뽑기 위해서는
서브쿼리를 구성해야 한다는 점이 핵심이었습니다.

또한 “가장 높은 값 1개만 조회”라는 요구 때문에
ORDER BY … DESC + LIMIT 1 조합이 떠오르는지가
문제를 빠르게 푸는 관건이었습니다.

만약 이 패턴을 알고 있다면 매우 쉽게 풀리는 문제이지만,
서브쿼리 구조를 떠올리지 못하면 생각보다 시간이 오래 걸릴 수 있는 문제였습니다.

 


 

궁금하신 점이나 포스팅에 대한 피드백이 있다면 댓글로 편하게 남겨주세요.
도움이 되셨다면 공감이나 댓글 한 줄 남겨주시면 포스팅을 이어가는 데 큰 힘이 됩니다. 😊

'코딩테스트 > MYSQL' 카테고리의 다른 글

[프로그래머스 LV.2] 성분으로 구분한 아이스크림 총 주문량 — MySQL 정답 & 해설  (0) 2025.12.01
[프로그래머스 LV.2] 조건에 맞는 도서와 저자 리스트 출력하기 — MySQL 정답 & 해설  (3) 2025.11.29
[프로그래머스 LV.2] ROOT 아이템 구하기 — MySQL 정답 & 해설  (0) 2025.11.27
[프로그래머스 LV.2] 업그레이드 된 아이템 구하기 — MySQL 정답 & 해설  (0) 2025.11.21
[프로그래머스 LV.2] 노선별 평균 역 사이 거리 조회하기 — MySQL 정답 & 해설  (0) 2025.11.20
'코딩테스트/MYSQL' 카테고리의 다른 글
  • [프로그래머스 LV.2] 성분으로 구분한 아이스크림 총 주문량 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] 조건에 맞는 도서와 저자 리스트 출력하기 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] ROOT 아이템 구하기 — MySQL 정답 & 해설
  • [프로그래머스 LV.2] 업그레이드 된 아이템 구하기 — MySQL 정답 & 해설
작지만 꾸준한 성장으로
작지만 꾸준한 성장으로
contact
  • 작지만 꾸준한 성장으로
    파랑새
    작지만 꾸준한 성장으로
  • 전체
    오늘
    어제
    • 분류 전체보기 (26)
      • IT (3)
      • 코딩테스트 (23)
        • 알고리즘 (12)
        • MYSQL (11)
      • 패션 (0)
      • 독후감 (0)
      • TIL (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    sql 코딩테스트
    백준
    파이썬
    데이터 전처리 파이프라인
    와이드 포맷 롱 포맷
    데이터베이스
    python3
    I/O Bound
    알고리즘
    Programmers
    Pandas melt
    코딩테스트
    long format
    프로그래머스 lv.2
    코테
    Pandas pivot
    자바
    Python
    Pandas groupby agg
    파이썬코테
    공공데이터 전처리
    CPU Bound
    프로그래머스 lv.1
    SWEA
    모델 추론
    데이터 리모델링
    프로그래머스 lv.0
    mysql
    wide format
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
작지만 꾸준한 성장으로
[프로그래머스 LV.2] 조건에 맞는 사원 정보 조회하기 — MySQL 정답 & 해설
상단으로

티스토리툴바