https://leetcode.com/problems/department-highest-salary/
SELECT d.name AS department,
e.name AS Employee,
e.salary AS Salary
FROM employee e
LEFT JOIN department d ON e.departmentid = d.id
GROUP BY d.name
HAVING (d.name, e.salary) IN -- Department별 최고연봉을 서브쿼리로 작성하고자 했음
(
SELECT d.name,
MAX(e.salary)
FROM employee e
LEFT JOIN department d ON e.departmentid = d.id
GROUP BY d.name
)
이렇게 작성했을때의 문제점 !
HAVING 절은 집계함수의 결과에 대한 조건을 필터링하기 위해 사용되는 방식이므로 이렇게 쓰는건 옳지 않다는 것이다.
정답 쿼리는 다음과 같다.
SELECT d.name AS Department,
e.name AS Employee,
e.salary AS Salary
FROM employee e
LEFT JOIN department d ON e.departmentid = d.id
WHERE (e.departmentid, e.salary) IN (
SELECT departmentid,
MAX(salary)
FROM employee e
GROUP BY departmentid -- department별 최고연봉
)
1. 서브쿼리에서 JOIN을 가급적 사용하지 않는 형태로 쿼리를 작성하고
2. Department별 최고연봉을 구한 후 해당 DepartmentId와 Salary를 받는 사람을 WHERE절 서브쿼리를 통해 필터링
'SQL > 문제풀이' 카테고리의 다른 글
[LeetCode] Rising Temperature (0) | 2024.03.01 |
---|---|
[LeetCode] SQL 50 : Select (0) | 2024.02.26 |
[HakcerRank] Top Earners (0) | 2024.02.16 |
[LeetCode] Swap Salary (0) | 2024.02.15 |
[HackerRank] Symmetric Pairs 📌 (0) | 2024.02.14 |