728x90
반응형
문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/284529문제 요약
주어진 문제는 회사의 부서 정보와 사원 정보가 저장된 두 개의 테이블, HR_DEPARTMENT와 HR_EMPLOYEES 테이블을 이용하여 부서별 평균 연봉을 계산하는 SQL 쿼리를 작성하는 것입니다. 쿼리는 다음과 같은 결과를 반환해야 합니다:
- 부서 ID
- 영문 부서명
- 부서별 평균 연봉 (소수점 첫째 자리에서 반올림하여 표시)
결과는 평균 연봉을 기준으로 내림차순 정렬해야 합니다.
풀이 방법
- 테이블 결합: 부서 정보(HR_DEPARTMENT 테이블)와 사원 정보(HR_EMPLOYEES 테이블)를 부서 ID를 기준으로 JOIN합니다.
- 평균 연봉 계산: AVG() 함수로 부서별 평균 연봉을 계산하고, ROUND() 함수를 사용하여 소수점 첫째 자리에서 반올림합니다.
- GROUP BY: 부서별로 그룹화하여 각 부서의 평균 연봉을 계산합니다.
- 정렬: 계산된 평균 연봉을 기준으로 내림차순 정렬합니다.
정답 코드
-- 코드를 작성해주세요
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
반응형
'코딩테스트 > SQL' 카테고리의 다른 글
[MySQL] 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 (0) | 2024.10.09 |
---|---|
[MySQL] 대장균의 크기에 따라 분류하기 1 (0) | 2024.10.09 |
[MySQL] 조건에 맞는 사용자 정보 조회하기 (2) | 2024.10.07 |
[MySQL] 즐겨찾기가 가장 많은 식당 정보 출력하기 (1) | 2024.10.06 |
[MySQL] 조건에 맞는 사용자와 총 거래금액 조회하기 (0) | 2024.10.06 |