SQL 연습 문제 - Lv4. 가장 높은 월급을 받는 직원은?

이희수·2024년 12월 18일

Employees 테이블:

EmployeeIDNameDepartmentSalaryManagerID
1AliceHR70000NULL
2BobIT900001
3CharlieIT800002
4DavidIT850002
5EveHR750001
6FrankFinance95000NULL
7GraceFinance800006
8HeidiIT950002

요구사항:

  1. 각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.
    1. 기대결과
      NameDepartmentSalaryTop_EarnerTop_Salary
      AliceHR70000Eve75000
      BobIT90000Heidi95000
      CharlieIT80000Heidi95000
      DavidIT85000Heidi95000
      EveHR75000Eve75000
      FrankFinance95000Frank95000
      GraceFinance80000Frank95000
      HeidiIT95000Heidi95000
    내가 작성한 쿼리 :
   select e.Name , e.Department , e.Salary , b.Name Top_Earner, b.Salary Top_Salary
from 
(
select Department , Name, Salary
from 
(
select Department , Name, Salary, Rank() over(partition by Department order by Salary desc) ranking
from employees e 
) a
where ranking = 1
) b join employees e on b.Department = e.Department 

첫번째 서브쿼리에서 department내에서 salary가 높은 순으로 랭킹을 매길 수 있도록 쿼리를 작성해주었다.
두번째 서브쿼리에서는 랭킹이 1위인 데이터, 즉 salary가 가장 많은 경우만 결과값으로 남기도록 하였고,
마지막으로 department별로 salary가 가장 많은 경우만 남은 테이블과 employees 테이블을 join 하여, 각 테이블에서 필요한 컬럼의 데이터를 select하도록 쿼리를 작성했다.

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

      DepartmentAvg_Salary
      IT87500

내가 작성한 쿼리 :

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

부서별 샐러리의 평균을 구하고, 평균 월급 값이 큰 순서로 정렬한 뒤, 가장 첫번째 행만 남도록 쿼리를 작성했다.

0개의 댓글