Post

퀘스트 - 달리기반 Lv4. 가장 높은 월급을 받는 직원은?

퀘스트 - 달리기반 Lv4. 가장 높은 월급을 받는 직원은?

문제

  • Employees 테이블:
EmployeeIDNameDepartmentSalaryManagerID
1AliceHR70000NULL
2BobIT900001
3CharlieIT800002
4DavidIT850002
5EveHR750001
6FrankFinance95000NULL
7GraceFinance800006
8HeidiIT950002
  • 요구사항:
    • 각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.
      • a. 기대 결과
      NameDepartmentSalaryTop_EarnerTop_Salary
      AliceHR70000Eve75000
      BobIT90000Heidi95000
      CharlieIT80000Heidi95000
      DavidIT85000Heidi95000
      EveHR75000Eve75000
      FrankFinance95000Frank95000
      GraceFinance80000Frank95000
      HeidiIT95000Heidi95000
    • 부서별로 평균 월급이 가장 높은 부서의 이름과 해당 부서의 평균 월급을 조회하는 SQL 쿼리를 작성해주세요.
      • a. 기대 결과
      DepartmentAvg_Salary
      IT87500

제약사항:

  • 두 쿼리 모두 서브쿼리, JOIN, GROUP BY, HAVING 등의 기능을 활용해주세요.




문제 풀이

  • 문제1 - 각 직원의 이름, 부서, 월급, 그리고 그 직원이 속한 부서에서 가장 높은 월급을 받고 있는 직원의 이름과 월급을 조회하는 SQL 쿼리를 작성해주세요.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    select e1.Name Name,
         e1.Department Department,
         e1.Salary Salary,
         e2.Name Top_Earner,
         e2.Salary Top_Salary
    from Employees e1 inner join Employees e2 on e1.Department=e2.Department
    where e2.Salary = (
      select max(Salary)
      from Employees e3
      where e3.Department=e1.Department
    );
    
  • 직원의 부서에 따라 다른 직원까지 탐색해야 하기에 INNER JOIN을 사용합니다
  • WHERE절로 다른 직원 중 가장 높은 월급을 받고 있는 직원을 탐색하여 조건을 걸어줍니다


  • 문제2 - 부서별로 평균 월급이 가장 높은 부서의 이름과 해당 부서의 평균 월급을 조회하는 SQL 쿼리를 작성해주세요.
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    select Department,
         avg(Salary) Avg_Salary
    from Employees
    group by Department
    having avg(Salary) = (
      select max(Avg_Salery2)
      from (
          avg(Salary) Avg_Salary2
          from Employees
          group by Department
      ) s1
    );
    
  • 각 부서별 평균 월급을 탐색한 뒤 가장 높은 값을 HAVING에서 조건으로 걸어줍니다

사실 이 문제는 ORDER BY, LIMIT으로도 풀 수 있을 것 같은데 제약사항에 맞게 HVAING 등을 사용하여 풀었습니다

This post is licensed under CC BY 4.0 by the author.