From 83c807d533c368de62a69cd8b46aee993b793534 Mon Sep 17 00:00:00 2001 From: Andrei Punko Date: Mon, 2 Dec 2024 23:27:42 +0300 Subject: [PATCH] =?UTF-8?q?Add=20SQL=20task=20=E2=84=9617.=20Add=20script?= =?UTF-8?q?=20to=20run=20PostgreSQL=20Docker=20container=20for=20SQL=20tas?= =?UTF-8?q?ks?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/17.sql | 44 +++++++++++++++++++++++++++++++++++++++++++ sql/README.md | 1 + sql/run-in-docker.bat | 3 +++ 3 files changed, 48 insertions(+) create mode 100644 sql/17.sql create mode 100644 sql/run-in-docker.bat 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