SELECT
e1.Name,
e1.Department,
e1.Salary,
e2.Name Top_Earner,
e2.Salary Top_Salary
FROM
Employees e1
JOIN Employees e2 ON
e1.Department = e2.Department
WHERE
e2.Salary = (
SELECT
max(Salary)
FROM
Employees e3
WHERE
e3.Department = e1.Department
)
아무리 봐도 이해가 완벽히 되지않아 GPT와 대화를 나누며 하나하나 파악해봤다.
e1과 e2를 Department 기준으로 INNER JOIN을 하는데, 저렇게 되면 부서가 겹치는 인원들에 대해 모든 조합이 튀어나온다. 예시는 아래와 같다.

그 뒤 WHERE절을 통하여 각 부서별 최대 Salary들과 일치하는 값들로 선택해준다. 그 결과 e2에서는 부서가 겹치는 인원들에 대한 모든 조합 중 Salary가 최대인 값들인 조합들만 생존하게 된다. 예시는 아래와 같다
그 뒤는 필요한 컬럼들만 골라서 이름을 지정해준 것이다.
막상 설명을 보면 그렇구나 싶은데, 문제를 풀 때 INNER JOIN을 통해 모든 조합을 생성하는 부분을 생각하기가 쉽지 않았던 것 같다.
SELECT
e.Name,
e.Department,
e.Salary,
b.Name Top_Earner,
maxSalary Top_Salary
FROM
Employees e
LEFT JOIN
(
SELECT
e.Name,
e.Department,
e.Salary,
a.maxSalary
FROM
Employees e
LEFT JOIN
(
SELECT
Department,
max(Salary) maxSalary
FROM
Employees e
GROUP BY
1) a
ON
e.Department = a.Department
WHERE
Salary = maxSalary
) b
ON
b.Department = e.Department
예시 답안과 비교하면 무식해 보이는 답이다. 서브쿼리부터 설명하자면