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 직책
EMAIL 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로 결과 정렬

실제 업무에서도 많이 쓰이는 구조이기 때문에 꼭 익혀두면 좋아요!
필요하시면 다른 실전 예제들도 이 포맷으로 정리해드릴게요 :)

 

감사합니다.