리트코드 [Department Highest Salary]

윤태영·2024년 8월 30일
0
post-thumbnail

문제

https://leetcode.com/problems/department-highest-salary/description/

각 부서별로 최고 연봉을 받는 직원을 순서에 상관없이 반환하는 쿼리를 작성

Table: Employee

Table: Department

Example1

문제풀이

각 부서별로 최고 연봉과 그 해당 부서를 조건 (max(salary), departmentId)으로 설정하고,
이에 해당하는 담당자를 반환하는 방식으로 쿼리를 작성

쿼리

SELECT B.name AS Department,  A.NAME AS Employee, salary 
FROM Employee A
inner join Department B on A.departmentid = B.id
WHERE (A.departmentid, SALARY) IN (
    SELECT departmentid, MAX(salary)
    FROM Employee
    GROUP BY departmentID


)

윈도우 함수 문제풀이

  • WITH문에서 MAX() 윈도우함수로 부서 별 가장 높은 salary를 구한다.

  • 동일 부서 내 사람들의 Salary 중 가장 큰 Salary가 표시되는 Max_Salary 열이 새로 생긴다.

  • Department id를 기준으로 INNER JOIN하여 출력을 위한 Department 이름을 가져온다.

  • WHERE절에서 Salary = Max_Salary로 가장 높은 임금에 해당하는 행만 가져온다.

쿼리

WITH CTE AS (
      SELECT A.name AS Employee,
       B.name AS Department,
       Salary,
       MAX(Salary) OVER(PARTITION BY DepartmentId) as Max_Salary
FROM Employee A
INNER JOIN Department B ON A.departmentId = B.id
)

SELECT Employee,
       Department,
       Salary
FROM CTE
WHERE Salary = Max_Salary
profile
ice blue

0개의 댓글