diff --git a/sql/17.sql b/sql/17.sql new file mode 100644 index 0000000..99ff3a8 --- /dev/null +++ b/sql/17.sql @@ -0,0 +1,44 @@ + +-- 17. Поиск сотрудников, менеджеры которых покинули компанию + +-- Напишите SQL-запрос, который вернет идентификаторы сотрудников, чья зарплата строго меньше $30 000 +-- и чей руководитель покинул компанию. +-- Когда сотрудник покидает компанию, его информация удаляется из таблицы Employees, но у его подчиненных +-- остается его идентификатор. + +-- Таблица: Employees +-- +-------------+----------+ +-- | Column Name | Type | +-- +-------------+----------+ +-- | employee_id | int | +-- | name | varchar | +-- | manager_id | int | +-- | salary | int | +-- +-------------+----------+ +-- В таблице employee_id является первичным ключом для этой таблицы. +-- Эта таблица содержит информацию о сотрудниках, их зарплате и идентификаторе их руководителя. +-- У некоторых сотрудников нет руководителя (manager_id имеет значение null). +-- Верните таблицу результатов (идентификатор, зарплата), упорядоченную по идентификатору сотрудника. + +create table Employees ( + employee_id int primary key, + "name" varchar not null, + manager_id int, + salary int not null +); + +-- Нужны кейсы: +-- менеджер не покинул компанию и з/п <30к +-- менеджер не покинул компанию и з/п >30к +-- менеджер покинул компанию и з/п <30к +-- менеджер покинул компанию и з/п >30к + +insert into Employees(employee_id, name, manager_id, salary) values (1, 'Владимир', null, 45000); +insert into Employees(employee_id, name, manager_id, salary) values (2, 'Андрей', 1, 29000); -- менеджер не покинул компанию и з/п <30к +insert into Employees(employee_id, name, manager_id, salary) values (3, 'Алексей', 2, 31000); -- менеджер не покинул компанию и з/п >30к +insert into Employees(employee_id, name, manager_id, salary) values (4, 'Яна', 6, 29000); -- менеджер покинул компанию и з/п <30к +insert into Employees(employee_id, name, manager_id, salary) values (5, 'Дмитрий', 7, 31000); -- менеджер покинул компанию и з/п >30к +select * from Employees; + +-- Нужно найти работников, у которых заполнен manager_id значением, которого уже нет в таблице в колонке employee_id +select e.employee_id from Employees m right join Employees e on m.employee_id=e.manager_id where e.salary < 30000 and m.employee_id is null order by e.employee_id; diff --git a/sql/README.md b/sql/README.md index c9a326d..490907b 100644 --- a/sql/README.md +++ b/sql/README.md @@ -19,5 +19,6 @@ - [14. Поиск сотрудника с второй по величине зарплатой](14.sql) - [15. Задача о пользователях и их телефонах](15.sql) - [16. Задача про стадионы и матчи](16.sql) +- [17. Поиск сотрудников, менеджеры которых покинули компанию](17.sql) See [video solutions](https://youtu.be/GjDF_LdwYHU) of these tasks on YouTube diff --git a/sql/run-in-docker.bat b/sql/run-in-docker.bat new file mode 100644 index 0000000..d2c935e --- /dev/null +++ b/sql/run-in-docker.bat @@ -0,0 +1,3 @@ +echo Start Docker container with PostgreSQL + +docker-compose up