Добавить новых сотрудников таким образом, чтобы средняя зарплата в каждом отделе стала одинаковая,
Есть задача, написать код на SQL: Написать запрос, добавляющий новых сотрудников таким образом, чтобы средняя зарплата в каждом отделе стала одинаковая, причем зарплата новых сотрудников должна быть положительной. Можно добавить не более чем по 1 сотруднику в отдел. Поле CHIEF_ID для новых сотрудников оставить пустым.
Код для создания таблиц:
CREATE TABLE department
("department_id" numeric, "name" varchar(100), "upper_dep" numeric)
;
INSERT INTO department
("department_id", "name", "upper_dep")
VALUES
(1, 'prodazhniki', 0),
(2, 'kreditniki', 1),
(3, 'service', 1),
(4, 'vsp', 2),
(5, 'marketing', 4)
;
CREATE TABLE employee
("employer_id" numeric, "department_id" numeric, "name" varchar(100), "chief_id" numeric, "salary" numeric)
;
INSERT INTO employee
("employer_id", "department_id", "name", "chief_id", "salary")
VALUES
(1, 1, 'Ivan', 1, 99000),
(2, 1, 'Oleg', 0, 60000),
(3, 1, 'Mariazw', 0, 55000),
(4, 1, 'Veronika', 0, 60000),
(5, 1, 'Marat', 0, 87000),
(6, 2, 'Gulnaz', 1, 99000),
(7, 2, 'Viktor', 0, 70000),
(8, 2, 'Alina', 0, 69000),
(9, 2, 'Grigoriy', 0, 55000),
(10, 2, 'Michael', 0, 55000),
(11, 3, 'Stepan', 1, 96000),
(12, 3, 'Vasilisa', 0, 60000),
(13, 3, 'Karina', 0, 60000),
(14, 3, 'Olesya', 0, 55000),
(15, 3, 'Milana', 0, 59999),
(16, 4, 'Odrej', 1, 99000),
(17, 4, 'Ivanes', 0, 80000),
(18, 4, 'Vantey', 0, 78000),
(19, 4, 'Shamsutdin', 0, 80000),
(20, 4, 'Shamil', 0, 77000),
(21, 4, 'Mechman', 0, 76000),
(22, 4, 'Zwonarev', 0, 75000),
(23, 5, 'Snegana', 1, 90000),
(24, 5, 'Vasilen', 0, 45000),
(25, 5, 'Okolikos', 0, 65000),
(26, 5, 'Pasaremos', 0, 76000),
(27, 5, 'Solaris', 0, 77000),
(28, 5, 'Lok dog', 0, 89000),
(29, 5, 'Pazwiz', 0, 90000),
(30, 5, 'Dmitrislo', 0, 76000)
;
Как добавить по 1 новому сотруднику, оставить новую зарплату положительной и как оставить полу с шефом пустым я разобрался. Но каким образом сделать так, чтобы после добавления этих сотрудников средняя зарплата во всех отделах стала одинаковой? Каким образом написать формулу этого расчета?
INSERT INTO employee (employer_id, department_id, name, chief_id, salary)
SELECT
(SELECT MAX(employer_id) + 1 FROM employee) AS employer_id,
department_id,
CONCAT('NewEmployee', department_id) AS name,
NULL AS chief_id,
GREATEST(ROUND(((SELECT AVG(salary) FROM employee) -
(SELECT AVG(salary) FROM employee WHERE department_id = e.department_id)) /
(SELECT COUNT(DISTINCT department_id) FROM employee), 2), 0) AS salary_adjustment
FROM employee e
GROUP BY department_id;
select * from employee