Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Тестовое задание на позицию Junior Data Analyst. Задача по SQL

Дано:

Таблица с информацией о менеджерах банка data_manager: 'id' - идентификатор менеджера, 'name' - имя менеджера, 'sal' - зарплата менеджера

pic1

Таблица с информацией об отделениях банка data_vsp: 'id' - идентификатор отделения, 'vsp_name' - название отделения по близости к метро

pic1

Таблица-связка менеджеров и отделений, в которых они работают, map_vsp2manager: 'vsp_id' - идентификатор отделения, 'manager_id' - идентификатор менеджера

pic1

Задача:

Внутри каждого отделения для каждого менеджера найти ближайшего коллегу с бОльшей зарплатой. Вывести зарплату этого коллеги в столбец bigger_sal и его имя в столбец bigger_sal_name. Если такого коллеги нет, в столбцы вывести -1. Если у одного менеджера таких коллег несколько, вывести зарплату того коллеги, чей id больше.

Файлы

  • Запросы SQL с решением (сделал двумя разными способами) хранятся в файлах SQL_request_1.sql и SQL_request_2.sql

  • В файле solution_test_task_1.ipynb хранится решение в питоне через эмулятор sql

Решение

Сначала я объединяю таблицы чтобы получить все соответствия. Потом присваиваю менеджерам ранги (с повторениями для одинаковых значений) по зарплате внутри каждого отделения. Для первого ранга задаю значение bigger_sal '-1', так как первый ранг не может иметь коллегу с более высокой зарплатой, а для остальных подбираю в пару коллегу с более высоким рангом и бОльшим id. Делаю это двумя разными способомами.
Способ 1, через коррелирующий подзапрос: я использую дубль основной таблицы. Каждая строка с менеджером в главной таблице прогоняется через дублирующую таблицу (идентичную копию) и находит себе там нужного коллегу по указанным условиям.
Способ 2, через self join: я к главной таблице мерджу эту же таблицу, но предварительно в правой таблице смещаю ранги на один шаг вверх, и в пару ставлю более "рангового" коллегу. По условиям отфильтровываю лишние пары, и получаю нужный id менеджера в пару из правой таблицы.

About

Тестовое задание на позицию Junior Data Analyst. Задача по SQL. Поиск и составление удовлетворяющих условиям пар ячеек из разных таблиц

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages