PGMS_부서별 평균 연봉 조회하기 (SQL)
[level 3] 부서별 평균 연봉 조회하기 - 284529
성능 요약
메모리: undefined, 시간:
구분
코딩테스트 연습 > GROUP BY
채점결과
합계: 100.0 / 100.0
제출 일자
2025년 01월 19일 03:45:05
문제 설명
HR_DEPARTMENT
테이블은 회사의 부서 정보를 담은 테이블입니다. HR_DEPARTMENT
테이블의 구조는 다음과 같으며 DEPT_ID
, DEPT_NAME_KR
, DEPT_NAME_EN
, LOCATION
은 각각 부서 ID, 국문 부서명, 영문 부서명, 부서 위치를 의미합니다.
Column name | Type | Nullable |
---|---|---|
DEPT_ID | VARCHAR | FALSE |
DEPT_NAME_KR | VARCHAR | FALSE |
DEPT_NAME_EN | VARCHAR | FALSE |
LOCATION | VARCHAR | FLASE |
HR_EMPLOYEES
테이블은 회사의 사원 정보를 담은 테이블입니다. HR_EMPLOYEES
테이블의 구조는 다음과 같으며 EMP_NO
, EMP_NAME
, DEPT_ID
, POSITION
, EMAIL
, COMP_TEL
, HIRE_DATE
, SAL
은 각각 사번, 성명, 부서 ID, 직책, 이메일, 전화번호, 입사일, 연봉을 의미합니다.
Column name | Type | Nullable |
---|---|---|
EMP_NO | VARCHAR | FALSE |
EMP_NAME | VARCHAR | FALSE |
DEPT_ID | VARCHAR | FALSE |
POSITION | VARCHAR | FALSE |
VARCHAR | FALSE | |
COMP_TEL | VARCHAR | FALSE |
HIRE_DATE | DATE | FALSE |
SAL | NUMBER | FALSE |
문제
HR_DEPARTMENT
와 HR_EMPLOYEES
테이블을 이용해 부서별 평균 연봉을 조회하려 합니다. 부서별로 부서 ID, 영문 부서명, 평균 연봉을 조회하는 SQL문을 작성해주세요.
평균연봉은 소수점 첫째 자리에서 반올림하고 컬럼명은 AVG_SAL
로 해주세요.
결과는 부서별 평균 연봉을 기준으로 내림차순 정렬해주세요.
예시
HR_DEPARTMENT
테이블이 다음과 같고
DEPT_ID | DEPT_NAME_KR | DEPT_NAME_EN | LOCATION |
---|---|---|---|
D0005 | 재무팀 | Finance | 그렙타워 5층 |
D0006 | 구매팀 | Purchasing | 그렙타워 5층 |
D0007 | 마케팅팀 | Marketing | 그렙타워 6층 |
HR_EMPLOYEES
테이블이 다음과 같을 때
EMP_NO | EMP_NAME | DEPT_ID | POSITION | COMP_TEL | HIRE_DATE | SAL | |
---|---|---|---|---|---|---|---|
2019003 | 한동희 | D0005 | 팀장 | donghee_han@grep.com | 031-8000-1122 | 2019-03-01 | 57000000 |
2020032 | 한명지 | D0005 | 팀원 | mungji_han@grep.com | 031-8000-1123 | 2020-03-01 | 52000000 |
2022003 | 김보라 | D0005 | 팀원 | bora_kim@grep.com | 031-8000-1126 | 2022-03-01 | 47000000 |
2018005 | 이재정 | D0006 | 팀장 | jaejung_lee@grep.com | 031-8000-1127 | 2018-03-01 | 60000000 |
2019032 | 윤성희 | D0006 | 팀원 | sunghee_yoon@grep.com | 031-8000-1128 | 2019-03-01 | 57000000 |
2020009 | 송영섭 | D0006 | 팀원 | yungseop_song@grep.com | 031-8000-1130 | 2020-03-01 | 51000000 |
2021006 | 이성주 | D0006 | 팀원 | sungju_lee@grep.com | 031-8000-1131 | 2021-03-01 | 49000000 |
2018004 | 이주리 | D0007 | 팀장 | joori_lee@grep.com | 031-8000-1132 | 2018-03-01 | 61000000 |
2020012 | 김사랑 | D0007 | 팀원 | sarang_kim@grep.com | 031-8000-1133 | 2020-03-01 | 54000000 |
2021018 | 김히라 | D0007 | 팀원 | heera_kim@grep.com | 031-8000-1136 | 2021-03-01 | 49000000 |
SQL을 실행하면 다음과 같이 출력되어야 합니다.
DEPT_ID | DEPT_NAME_EN | AVG_SAL |
---|---|---|
D0007 | Marketing | 54666667 |
D0006 | Purchasing | 54250000 |
D0005 | Finance | 52000000 |
출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges
문제풀이
-
테이블 연결 방식 결정
- 두 테이블의 공통 컬럼인 DEPT_ID를 기준으로 JOIN
- HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 INNER JOIN
-
데이터 그룹화
- GROUP BY 절에는 집계함수를 제외한 SELECT 절의 모든 컬럼이 포함되어야 함
- 부서별로 그룹화하므로 DEPT_ID와 DEPT_NAME_EN을 GROUP BY에 포함
-
연봉 계산 및 정렬
- AVG(SAL)로 평균 연봉 계산
- ROUND 함수로 소수점 첫째 자리에서 반올림 (뒤에 적는 숫자는 나타내는 자릿수 숫자이므로 0으로)
- ORDER BY로 평균 연봉 기준 내림차순 정렬
코드
1
2
3
4
5
6
SELECT hd.DEPT_ID, hd.DEPT_NAME_EN, ROUND(AVG(SAL), 0) AS AVG_SAL
FROM HR_DEPARTMENT AS hd
JOIN HR_EMPLOYEES AS he
ON hd.DEPT_ID = he.DEPT_ID
GROUP BY hd.DEPT_ID, hd.DEPT_NAME_EN
ORDER BY AVG_SAL DESC;