Как исправить ошибку функции «ВСТАВИТЬ в ВЫБРАННУЮ группу»

#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  

Я не знаю, вернет ли это результат, которого вы ожидаете, но — по крайней мере — не должно вызвать ошибку.