데이터 분석

흐름을 읽고
인사이트를 만든다.

13.프로그래머스 SQL Lv.3 (부서별 평균 연봉 조회하기)

2026. 5. 19. 12:40프로그래머스 SQL

문제 설명
HR_DEPARTMENT 테이블은 회사의 부서 정보를 담은 테이블입니다. HR_DEPARTMENT 테이블의 구조는 다음과 같으며 DEPT_ID, DEPT_NAME_KR, DEPT_NAME_EN, LOCATION은 각각 부서 ID, 국문 부서명, 영문 부서명, 부서 위치를 의미합니다.

HR_EMPLOYEES 테이블은 회사의 사원 정보를 담은 테이블입니다. HR_EMPLOYEES 테이블의 구조는 다음과 같으며 EMP_NO, EMP_NAME, DEPT_ID, POSITION, EMAIL, COMP_TEL, HIRE_DATE, SAL은 각각 사번, 성명, 부서 ID, 직책, 이메일, 전화번호, 입사일, 연봉을 의미합니다.

문제
HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 이용해 부서별 평균 연봉을 조회하려 합니다. 부서별로 부서 ID, 영문 부서명, 평균 연봉을 조회하는 SQL문을 작성해주세요.

평균연봉은 소수점 첫째 자리에서 반올림하고 컬럼명은 AVG_SAL로 해주세요.
결과는 부서별 평균 연봉을 기준으로 내림차순 정렬해주세요.

문제 파악

1. 부서 정보(HR_DEPARTMENT)와 사원 정보(HR_EMPLOYEES)를 DEPT_ID 기준으로 합친다. (JOIN)

2. 부서 ID와 영문 부서명을 기준으로 데이터를 그룹화 한다. (GROUP BY)

3.AVG(SAL) 로 평균을 구하고, 조건에 맞게 ROUND(..., 0) 함수 사용 (첫째 자리 반올림)

4.평균 연봉을 기준으로 내림차순 정렬

 

해결 과정

1. SELECT HD.DEPT_ID, HD.DEPT_NAME_EN,  ROUND(AVG(HE.SAL), 0) AS AVG_SAL

 

  • 부서 ID, 영문 부서명과 함께 계산된 평균 연봉을 선택
  • AVG(HE.SAL): 그룹화된 부서원들의 연봉(SAL) 평균을 구한다.
  • ROUND(..., 0): 소수점 첫째 자리에서 반올림 

2.FROM HR_DEPARTMENT HD JOIN HR_EMPLOYEES HE ON HD.DEPT_ID = HE.DEPT_ID

  • 부서의 영문 이름과 사원들의 연봉 정보가 분리되어 있으므로, 부서 코드 고유값인 DEPT_ID를 매핑 키로 잡아 결합

3. GROUP BY HD.DEPT_ID, HD.DEPT_NAME_EN

  • AVG같은 집계 함수를 사용할 때 집계 하지 않는 일반 컬럼은 반드시 GROUP BY 절에 모두 명시

4. 평균 연봉 수치가 높은 부서 부터 위에 나오도록 내림차순 정렬

 

답변

SELECT 
    HD.DEPT_ID, 
    HD.DEPT_NAME_EN, 
    ROUND(AVG(HE.SAL), 0) AS AVG_SAL
FROM HR_DEPARTMENT HD
JOIN HR_EMPLOYEES HE ON HD.DEPT_ID = HE.DEPT_ID
GROUP BY HD.DEPT_ID, HD.DEPT_NAME_EN
ORDER BY AVG_SAL DESC;