#sql #oracle
#sql #Oracle
Вопрос:
Я изучаю oracle SQL прямо сейчас, и я застрял на проблеме, когда мне нужно использовать инструкцию INSERT В SELECT для заполнения таблицы на основе запроса. Мне нужно, чтобы таблица была заполнена информацией о сотрудниках, которые зарабатывают меньше средней зарплаты в компании И работают по крайней мере над двумя проектами. Ниже приведены таблицы, с которыми я работаю, и мой код, пожалуйста, скажите мне, где я ошибаюсь, так как я получаю ошибку в функции group by с моим текущим кодом. Спасибо!
Таблицы:
Division
(DID, имя пользователя, идентификатор менеджера)Employee
(EmpID, имя, зарплата, СДЕЛАЛ)Workon
(PID, EmpID, часы)Promotion_list
(EmpID, имя, зарплата, название подразделения)
Код:
insert into Promotion_list select e.empid, e.name, e.salary, d.dname from employee e inner join division d on e.did = d.did inner join workon w on w.empid = e.empid where e.salary lt; (select avg(salary) from employee) and count(w.pid) gt;= 2
Комментарии:
1. count (*) — это агрегатная функция. Вам нужна группа где-нибудь, вы читали о ГРУППЕ РЯДОМ?
Ответ №1:
Функция Count не может быть в where
, но может быть в having
предложении, что означает, что вам также понадобятся group by
все неагрегированные столбцы.
Что — то вроде этого:
insert into Promotion_list (empID, name, salary, divisionName) select e.empid, e.name, e.salary, d.dname from employee e inner join division d on e.did = d.did inner join workon w on w.empid = e.empid where e.salary lt; (select avg(salary) from employee) group by e.empid, e.name, e.salary, d.dname having count(w.pid) gt;= 2
Я не знаю, вернет ли это результат, которого вы ожидаете, но — по крайней мере — не должно вызвать ошибку.