🔗 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 처리 구조입니다.
사원별 총점을 구하려면 다음이 필요합니다.
- SUM(SCORE) → 사원별 점수 누적
- 그중 가장 높은 점수(MAX) 선택
그런데 집계함수는 한 번에 두 개(MAX와 SUM)를 동시에 쓸 수 없으므로,
SUM을 먼저 계산한 뒤,
그 결과에서 최댓값을 뽑는 로직이 필요합니다.
이때 사용하는 방식이 바로 서브쿼리 + ORDER BY + LIMIT 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 |