코딩테스트/SQL

[MySQL] 부서별 평균 연봉 조회하기

rlatotquf45 2024. 10. 9. 09:38
728x90
반응형

https://school.programmers.co.kr/learn/courses/30/lessons/284529

문제 요약

주어진 문제는 회사의 부서 정보와 사원 정보가 저장된 두 개의 테이블, HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 이용하여 부서별 평균 연봉을 계산하는 SQL 쿼리를 작성하는 것입니다. 쿼리는 다음과 같은 결과를 반환해야 합니다:

  • 부서 ID
  • 영문 부서명
  • 부서별 평균 연봉 (소수점 첫째 자리에서 반올림하여 표시)

결과는 평균 연봉을 기준으로 내림차순 정렬해야 합니다.

풀이 방법

  1. 테이블 결합: 부서 정보(HR_DEPARTMENT 테이블)와 사원 정보(HR_EMPLOYEES 테이블)를 부서 ID를 기준으로 JOIN합니다.
  2. 평균 연봉 계산: AVG() 함수로 부서별 평균 연봉을 계산하고, ROUND() 함수를 사용하여 소수점 첫째 자리에서 반올림합니다.
  3. GROUP BY: 부서별로 그룹화하여 각 부서의 평균 연봉을 계산합니다.
  4. 정렬: 계산된 평균 연봉을 기준으로 내림차순 정렬합니다.

정답 코드

-- 코드를 작성해주세요
select e.dept_id, d.dept_name_en, round(avg(sal),0) as avg_sal
from hr_employees as e
join hr_department as d
on e.dept_id = d.dept_id
group by e.dept_id
order by avg_sal desc

새롭게 배운 내용

MySQL에서 소수점 처리는 TRUNCATE()와 ROUND() 두 가지 방식으로 가능합니다.

  • ROUND(value, decimal_places): 주어진 값에서 소수점 decimal_places 자리에서 반올림합니다. decimal_places가 0일 경우 정수로 반올림됩니다.
    • 예: ROUND(54666.6667, 0) → 54667
  • TRUNCATE(value, decimal_places): 주어진 값에서 소수점 decimal_places 자리까지만 남기고, 그 이후는 자릅니다. 반올림이 아니라 그냥 잘라냅니다.
    • 예: TRUNCATE(54666.6667, 0) → 54666

이 문제에서는 소수점 첫째 자리에서 반올림해야 하므로 ROUND() 함수를 사용합니다.

728x90
반응형