Leetcode MySQL Department Top Three Salaries
업데이트:
문제
코드
# Write your MySQL query statement below
SELECT Department.Name AS 'Department'
, Employee.Name AS 'Employee'
, Employee.Salary
FROM Employee
INNER JOIN Department ON Employee.DepartmentId = Department.Id
LEFT OUTER JOIN Employee temp ON Department.Id = temp.DepartmentId AND Employee.Salary < temp.Salary
GROUP BY Department.Name
, Employee.Name
, Employee.Salary
HAVING COUNT(DISTINCT temp.Salary) < 3
결과
설명
-
Employee, Department Table을 이용하여 부서 별 가장 높은 급여를 받는 3명의 직원들을 찾는 문제이다.
-
Employee와 Department Table을 INNER JOIN 수행한다.
-
비교를 위한 Employee Table을 temp란 별칭으로 LEFT OUTER JOIN을 이용하여 Department Table의 Id가 동일하고 Employee Table의 Salary보다 큰 값을 넣어준다.
-
그룹 함수를 이용하여 중복되지 않은 temp.Salary가 3개 미만인 개수만 대상으로 Department.Name, Employee.Name, Employee.Salary을 출력한다.
- Employee와 Department Table을 JOIN된 결과에서 LEFT OUTER JOIN으로 Employee를 급여 기준으로 걸었기 때문에, 급여가 높은 인원만큼의 Row가 추가 생성된다.
- 이 Row를 기준으로 COUNT를 세서 3개 미만인 경우만 출력되게 한 것이다.
댓글남기기