MySQL создает новый столбец со средним значением из другого столбца - PullRequest
0 голосов
/ 17 мая 2018

Я пытаюсь выполнить упражнение, в котором мне предлагается создать новую колонку со средней зарплатой сотрудников в каждом отделе. Моя БД содержит таблицу сотрудников и отделов. сотрудников - это список сотрудников, в которых, помимо прочих данных, зарплата каждого человека и их отдел_ид . отделы содержат отдела_идентификатора , названия_подразделения и т. д. Я уже использовал ALTER TABLE , чтобы добавить столбец с именем AVG_SALARY в отделы . Теперь я хотел бы заполнить его окладом AVG на основе столбца оклад из таблицы сотрудник . До сих пор я придумал много решений, но ни одно из них не сработало. Некоторые из них были:

UPDATE departments D 
INNER JOIN employees E ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
SET AVG_SALARY = AVG(employees.SALARY);
GROUP BY DEPARTMENT_ID;

РЕЗУЛЬТАТ: Код ошибки: 1111. Неправильное использование групповой функции

UPDATE departments D
SET D.AVG_SALARY = 
(SELECT AVG(e.SALARY)
FROM employees E INNER JOIN (SELECT * FROM departments) AS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY D.DEPARTMENT_ID); 

РЕЗУЛЬТАТ: Код ошибки: 1242. Подзапрос возвращает более 1 строки

INSERT INTO departments (DEPARTMENT_ID, AVG_SALARY)
SELECT D.DEPARTMENT_ID, AVG(salary)
FROM EMPLOYEES E INNER JOIN DEPARTMENTS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY DEPARTMENT_ID;

РЕЗУЛЬТАТ: Код ошибки: 1364. Поле "DEPARTMENT_NAME" не имеет значение по умолчанию

Кто-нибудь может здесь помочь?

1 Ответ

0 голосов
/ 17 мая 2018

Попробуйте с этим, который является модификацией того, который вы сделали на втором месте:

UPDATE departments D
SET D.AVG_SALARY = 
    (SELECT AVG(e.SALARY)
     FROM employees E 
     where  D.DEPARTMENT_ID=E.DEPARTMENT_ID
     GROUP BY E.DEPARTMENT_ID); 
...