본문 바로가기

SQL

SQL 실전! 실제 DB에서 연습해요(3) - Lv4. 가장 높은 월급을 받는 직원은?

Employees 테이블

EmployeeID Name Department Salary ManagerID
1 Alice HR 70000 NULL
2 Bob IT 90000 1
3 Charlie IT 80000 2
4 David IT 85000 2
5 Eve HR 75000 1
6 Frank Finance 95000 NULL
7 Grace Finance 80000 6
8 Heidi IT 95000 2

 

 

1. 각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.

select e.Name,
		e.Department,
		e.Salary,
		b.Top_Earner,
		b.Top_Salary
from employees e
	inner join 
	(
		select Department,
			Name Top_Earner,
			Salary Top_Salary
		from 
		(
		select Department,
			Name,
			Salary,
		rank() over(partition by Department order by Salary desc) rn
		from employees
		)a
		where rn = 1
	)b on e.Department = b.Department

 

  • 먼저 각 부서별 월급 순위를 윈도우 함수를 통해서 만든 후에 이를 서브쿼리로 만들어서 where절을 이용하여 부서별 1순위만 추출함
  • 그 후에 해당 결과를 서브쿼리로 만들어서 서브쿼리와 조인해서 결과를 도출함

2. 부서별로 평균 월급이 가장 높은 부서의 이름과 해당 부서의 평균 월급을 조회하는 SQL 쿼리를 작성해주세요.

select Department,
	avg(Salary) Avg_Salary
from employees e
group by Department
order by Avg_Salary desc limit 1