Все знают, что решать задачи на LeetCode полезно как для прокачки мозга, так и для подготовки к собеседованиям. Но времени на это хватает не всегда, а вот разобраться, что там вообще решается, хочется. Поэтому я решила делиться с вами готовыми решениями! Сегодня у нас задача уровня Medium — разберем вместе (вот она).
Чтобы можно было потестить решение, напишу его с помощью библиотеки pandasql в Jupyter Notebook. Библиотека позволяет выполнять SQL-запросы прямо в Юпитере, а вместо базы можно просто создавать DataFrame.
Итак, в этом задании требуется написать SQL-запрос, чтобы найти всех менеджеров, у которых как минимум 5 прямых подчиненных.
Таблица Employee:
id : первичный ключ (уникальный идентификатор сотрудника).
name : имя сотрудника.
department : департамент сотрудника.
managerId : id менеджера этого сотрудника.
Если managerId равен NULL, значит у сотрудника нет менеджера, то есть он и есть шеф.
Никакой сотрудник не будет являться своим собственным менеджером.
Мы видим, что у менеджера с id = 101 (John) есть 5 подчиненных: Dan, James, Amy, Anne и Ron.
Его (John) нам и нужно получить в ответе.
1️⃣Создаем данные для дальнейшего тестирования кода. В data записаны сотрудники, их id, департамент и id их менеджеров. Преобразуем это в DataFrame.
import pandas as pd
from pandasql import sqldf
data = {
"id": [101, 102, 103, 104, 105, 106],
"name": ["John", "Dan", "James", "Amy", "Anne", "Ron"],
"department": ["A", "A", "A", "A", "A", "B"],
"managerId": [None, 101, 101, 101, 101, 101]
}
employee = pd.DataFrame(data)
2️⃣SQL-решение:
🔹Вложенный SQL-запрос:
- Сначала группируем сотрудников по managerId, чтобы можно было посчитать их кол-во.
- Оставляем только тех менеджеров, у которых 5 или больше подчиненных.
🔹Внешний запрос:
- Находим имена этих менеджеров по их id.
3️⃣Получаем имя менеджера, у которого 5 или больше подчиненных.
query = """
SELECT name
FROM employee
WHERE id in (
SELECT managerId
FROM employee
GROUP BY managerId
HAVING COUNT(*) >= 5
)
"""
sqldf(query)
Это задание помогает разобраться, как использовать группировку (GROUP BY) и фильтрацию с HAVING. Эти навыки часто нужны в реальной работе.
✅ Если вам такой разбор понравился, накидайте реакции! Буду разбирать задачки с LeetCode дальше. ✨🚀
