TGViewer
Мир аналитика данных Мир аналитика данных @analysts_world · 4.56K subscribers
Post #221 2.77K
👍 Решила задачку уровня Hard на LeetCode! Department Top Three Salaries

Полистала я список задач из блока SQL 50 на LeetCode и наткнулась на одну единственную задачку уровня hard. Решила проверить свои силы и решить ее. Задача относится к уровню Hard. Давайте разберем, что нужно было сделать и как я с этим справилась. 💼💡

📝 Условие задачи:
У нас есть две таблицы:

1️⃣Employee с колонками: id, name, salary, departmentId.

2️⃣Department с колонками: id, name.

Задача: найти сотрудников, которые входят в топ-3 по зарплате в каждом департаменте. При этом нужно учитывать только уникальные зарплаты. То есть, если несколько сотрудников имеют одинаковую зарплату, они занимают одно и то же место в рейтинге.

Для решения задачи я использовала SQL с функцией DENSE_RANK(), которая позволяет ранжировать сотрудников по зарплате внутри каждого департамента. Решала тестировала в юпитере. Вот как это выглядит:

import pandas as pd
from pandasql import sqldf
employee_data = {
'id': [1, 2, 3, 4, 5, 6, 7],
'name': ['Joe', 'Henry', 'Sam', 'Max', 'Janet', 'Randy', 'Will'],
'salary': [85000, 80000, 60000, 90000, 69000, 85000, 70000],
'departmentId': [1, 2, 2, 1, 1, 1, 1]
}

Employee = pd.DataFrame(employee_data)

department_data = {
'id': [1, 2],
'name': ['IT', 'Sales']
}

Department = pd.DataFrame(department_data)

Я покрутила данные и так и так и поняла, что мне проще сделать с оконкой такое задание. Можно и подзапросом конечно решить, но на мой взгляд оконка тут просто идеально подходит.
query = """
select Department,Employee,Salary
from
(SELECT d.name as Department,
e.name as Employee,
salary as Salary,
dense_rank() OVER (PARTITION BY d.name order by salary desc) as rank
FROM Employee AS e
LEFT JOIN Department d on d.id=e.departmentId
order by d.id, salary desc
)
where rank <=3
"""
sqldf(query)


💡DENSE_RANK() позволяет ранжировать сотрудников по зарплате, при этом сотрудники с одинаковой зарплатой получают одинаковый ранг.

💡PARTITION BY d.name группирует данные по департаментам.

💡ORDER BY salary DESC сортирует зарплаты по убыванию.

В итоге мы выбираем только те строки, где ранг меньше или равен 3.

Дайте знать если в таких задачках вам нужен файл юпитерский сразу с кодом. Буду прикреплять тогда.

P.S. Кстати за прошлую неделю я выдала медали в нашем рейтинге. 🥇🥈🥉Заглядывайте и присоединяйтесь!
  • ❤ 17
  • 👍 14
  • ❤‍🔥 4
More from @analysts_world
  1. Sep 21, 2026📊 Задачка с собеседования Ну что, по итогам голосования большинство хотят задачки и sql.…
  2. Sep 14, 2026Post #345
  3. Sep 14, 2026Что-то я тут прям зачастила с A/B тестами 😅 Смотрю на последние посты и такое чувство, чт…
  4. Sep 1, 2026🎒 С 1 сентября, друзья! Сегодня как раз отправила своих детей в школу – и вот это чувство…
  5. Aug 24, 2026Вне выборки Обычно здесь про SQL, Python и AB-тесты. Но не всё, что важно, попадает в выбо…
  6. Aug 20, 2026Fuckup Night от создателей Trisigma, Ares и karpov.courses Согласитесь, ивенты, где все де…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →