susinlee 님의 블로그

119. Department Top Three Salaries 본문

코드카타/SQL, Pandas

119. Department Top Three Salaries

susinlee 2025. 2. 27. 10:01

[문제]

https://leetcode.com/problems/department-top-three-salaries/description/

 

[풀이]

1. 부서 테이블과 병합한 후

2. 부서별로 salary의 순위를 계산한다. 이때 dense 옵션으로 1, 2, 2, 3 처럼 숫자의 누락이 없게, 같은 값은 같은 수위로 배정한다.

3. 순위가 4보다 작은 애들만 필터링한다.

 

Pandas

import pandas as pd

def top_three_salaries(employee: pd.DataFrame, department: pd.DataFrame) -> pd.DataFrame:
    department = department.rename(columns={'id': 'departmentId', 'name': 'department'})
    merged = employee.merge(department)
    merged['rank'] = merged.groupby('department')['salary'].transform(lambda x: x.rank(method='dense', ascending=False))
    return merged[merged['rank'] < 4][['department', 'name', 'salary']].rename(columns={'name':'employee'})

 

SQL

WITH joined AS (
    SELECT 
        d.name AS department
        , e.name AS employee
        , salary
    FROM Employee e
    JOIN Department d
        ON e.departmentId = d.id
),
ranked AS (
    SELECT 
        *
        , DENSE_RANK() OVER(PARTITION BY department ORDER BY salary DESC) AS salary_ranking
    FROM joined
)
SELECT 
    department
    , employee
    , salary
FROM ranked
WHERE salary_ranking <= 3

'코드카타 > SQL, Pandas' 카테고리의 다른 글

Page With No Likes  (0) 2025.03.07
Histogram of Tweets  (0) 2025.03.07
118. Investments in 2016  (0) 2025.02.25
117. Friend Requests II: Who Has the Most Friends  (0) 2025.02.10
SQL 윈도우 함수 구조  (0) 2025.02.09