Coding Test/SQL
부서별 평균 연봉 구하기 (SQL 문제 풀이)
_data
2025. 4. 14. 15:15
문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/284529
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
이번에는 부서별 평균 연봉을 계산하는 SQL 문제를 하나 정리해봅니다.
테이블 조인 + 서브쿼리 + 소수점 반올림 등
실무에서도 자주 쓰이는 패턴이어서 꼭 한번 직접 쿼리 짜보는 걸 추천드려요!
🗂️ 사용 테이블
HR_DEPARTMENT
컬럼명타입설명
DEPT_ID | VARCHAR | 부서 ID |
DEPT_NAME_KR | VARCHAR | 국문 부서명 |
DEPT_NAME_EN | VARCHAR | 영문 부서명 |
LOCATION | VARCHAR | 부서 위치 |
HR_EMPLOYEES
컬럼명타입설명
EMP_NO | VARCHAR | 사번 |
EMP_NAME | VARCHAR | 성명 |
DEPT_ID | VARCHAR | 부서 ID |
POSITION | VARCHAR | 직책 |
VARCHAR | 이메일 | |
COMP_TEL | VARCHAR | 전화번호 |
HIRE_DATE | DATE | 입사일 |
SAL | NUMBER | 연봉 |
✅ 문제 요구사항
- 부서별 평균 연봉을 구한다.
- 출력 컬럼: DEPT_ID, DEPT_NAME_EN, AVG_SAL
- AVG_SAL은 소수점 첫째 자리에서 반올림
- 평균 연봉 기준 내림차순 정렬
🧠 풀이 전략
- HR_EMPLOYEES에서 부서별 평균 연봉 계산 (GROUP BY)
- ROUND(AVG(SAL), 0) 으로 반올림 처리
- 부서 정보를 위해 HR_DEPARTMENT와 JOIN
- 최종적으로 ORDER BY로 정렬
💻 SQL 풀이
SELECT
d.DEPT_ID,
d.DEPT_NAME_EN,
AVG_SAL
FROM HR_DEPARTMENT d
JOIN (
SELECT
DEPT_ID,
ROUND(AVG(SAL), 0) AS AVG_SAL
FROM HR_EMPLOYEES
GROUP BY DEPT_ID
) e ON d.DEPT_ID = e.DEPT_ID
ORDER BY AVG_SAL DESC;
서브쿼리를 사용하지 않고 하는 방법이 더 편하긴 할 거예요.
🧾 출력 예시
DEPT_IDDEPT_NAME_ENAVG_SAL
D0007 | Marketing | 54666667 |
D0006 | Purchasing | 54250000 |
D0005 | Finance | 52000000 |
✍️ 정리
이 문제는 아래 SQL 개념들을 복습하기 좋습니다:
- GROUP BY로 집계 처리
- ROUND로 숫자 반올림
- JOIN으로 테이블 연결
- ORDER BY로 결과 정렬
실제 업무에서도 많이 쓰이는 구조이기 때문에 꼭 익혀두면 좋아요!
필요하시면 다른 실전 예제들도 이 포맷으로 정리해드릴게요 :)
감사합니다.