Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Datarian
- advent of sql
- leetcode
- funnel
- 퍼널분석
- dense_rank
- 순위함수
- 데이터리안
- 린분석
- regexp
- row_number
- python
- 누적합
- MYSQL
- 윈도우함수
- rank
- 윈도우 함수
- pandas
- Retention
- 취준
- 독서
- 프로그래머스
- 신입 데이터분석가
- 데이터분석
- SolveSQL
- 리텐션
- 서브쿼리
- SQL
- LEFTJOIN
- 그로스해킹
Archives
- Today
- Total
데이터 분석
184. Department Highest Salary | Medium📌 본문
문제
Write a solution to find employees who have the highest salary in each of the departments.
Return the result table in any order.


부서별 최고 급여를 갖는 직원의 부서명, 이름, 급여를 조회하는 문제이다.
📢동일한 최고 급여를 가진 경우 모두 출력해야 하기 때문에 순위함수 중 ROW_NUMBER 함수는 사용해서는 안 된다.
Solution
✅ WHERE절 다중 컬럼 서브쿼리를 활용
WITH highest AS (
SELECT departmentID
, MAX(salary)
FROM Employee
GROUP BY departmentID
)
SELECT d.name AS Department
, e.name AS Employee
, e.salary AS Salary
FROM Employee e
JOIN Department d ON e.departmentID = d.id
WHERE (e.departmentID, e.salary) IN (SELECT * FROM highest)
☞ highest CTE:
집계함수와 GROUP BY를 활용하여 부서별 최고 급여를 계산하는 임시 테이블을 생성
☞ 최종 SELECT:
WHERE절에 다중 컬럼 비교를 통해 조건을 만족하는 행만 필터링
이때 IN 연산자는 서브쿼리 결과와 튜플 단위로 비교한다.
✅ RANK() 함수와 윈도우 함수를 활용
WITH highest AS (
SELECT *
, RANK() OVER (PARTITION BY departmentID ORDER BY salary DESC) AS rk -- DENSE_RANK 도 가능
FROM Employee
)
SELECT d.name AS Department
, h.name AS Employee
, h.salary AS Salary
FROM highest h
JOIN Department d ON h.departmentID = d.id
WHERE h.rk = 1'SQL > leetcode' 카테고리의 다른 글
| 550. Game Play Analysis IV | Medium💡 (2) | 2025.01.21 |
|---|---|
| 262. Trips and Users | Hard 🔥 (2) | 2025.01.21 |
| 181. Employees Earning More Than Their Managers | Easy📌 (4) | 2025.01.10 |
| 183. Customers Who Never Order | Easy (1) | 2025.01.10 |
| 1179. Reformat Department Table | Easy (0) | 2025.01.10 |