Максим Онисенко
Знаток
(349)
2 месяца назад
timestamp) Таблица Departments: id — уникальный идентификатор department_name — название отдела Таблица Roles: id — уникальный идентификатор role_name — роль Название роли может быть “manager” (менеджер) или “developer” (разработчик) Таблица Role_Departments: role_id — идентификатор роли department_id — идентификатор отдела Связь между таблицами: Employees.manager_id -> Roles.id -> Role_Departments.role_id -> Departments.id Salary.employee_id -> Employees.id Roles.department_id -> Departments.id Валюты хранятся в отдельной таблице, которую мы не рассматриваем для упрощения задачи. Задача: Провести аудит зарплат сотрудников и бонусов, выплачиваемых в зависимости от роли и отдела. Вывести следующую информацию: Имя, Фамилия сотрудника, Название отдела, Роль, Месячная зарплата, Бонус в процентах от зарплаты. Если у сотрудника нет доступа к какому-либо значению, то в выводе для этого поля должно стоять NULL. Если у роли или отдела нет доступа к какой-либо информации, то она также должна быть NULL.
Доступны следующие таблицы и связи между ними:
Таблица Employees. Содержит всех сотрудников, состоит из следующих колонок:
id — уникальный идентификатор сотрудника
name — имя сотрудника
surname — фамилия сотрудника
birthday — день рождения (в формате строк dd-mm-yyyy)
start_date — дата начала работы в компании (в формате unix timestamp)
phone — мобильный телефон
telegramm — логин в Telegramm
manager_id — айди менеджера, которому подчиняется текущий сотрудник
Таблица Salary (в случае изменения зарплаты создается новая строчка в таблице):
id — уникальный ключ записи
employee_id — айди сотрудника
value — значение месячной зарплаты
bonus — процент от месячной зарплаты, который будет выплачен в качестве бонуса
currency_id — валюта для зарплаты
date — дата, с которой эта зарплата выплачивается (в формате unix timestamp)
Таблица Currency:
id — идентификатор валюты
ratio — курс к стандартной внутренней велюте
Вам необходимо найти и вывести средний размер бонуса в процентах по каждой валюте.
Для этого надо реализовать функцию get_result с указанным интерфейсом:
def get_result(db_name: str) -> dict[int, float]: ...
Примечания
Для работы с БД следует использовать модуль sqlite3, в таком случае получение подключения к базе будет выполнено с помощью conn = sqlite3.connect(db_name).
Вот задание, но у меня не правильно, вот код, пишет что где ошибка при выполнении, но не показывает, помогите пожалуйста
import sqlite3
def get_result(db_name: str):
conn = sqlite3.connect(db_name)
cursor = conn.cursor()
results = {}
cursor.execute("SELECT id, ratio FROM Currency Where (id is not null and ratio is not null);")
currencies = dict(cursor.fetchall())
for currency_id, ratio in currencies.items():
cursor.execute("""
SELECT AVG(bonus)
FROM Salary
WHERE currency_id = ?
""", (currency_id,))
average_bonus = cursor.fetchone()[0]
results[currency_id] = average_bonus * 100 / ratio
conn.close()
return results