Sql подзапрос с группировкой и объединением двух таблиц - PullRequest
0 голосов
/ 15 декабря 2018

Итак, у меня есть две таблицы EMPLOYEE. Содержит столбцы, включая EMPLOYEE_NAME, DEPARTMENT_ID и SALARY DEPARTMENTS. Содержит столбцы, включающие DEPARTMENT_NAME и DEPARTMENT_ID

.по средней зарплате.

Я новичок в БД и у меня проблемы.Я пытаюсь выполнить подзапрос в поле from (этот подзапрос возвращает именно то, что мне нужно, за вычетом названия отдела, которое требует от меня присоединения таблицы отделов к результатам), все данные в подзапросе находятся в одной таблице - сотрудники.в то время как название отдела находится в таблице отделов.

вот что я попробовал.

SELECT D.DEPARTMENT_NAME, T.PERDEPT
  FROM
(
 SELECT DEPARTMENT_ID, AVG(SALARY) AS PERDEPT
 FROM EMPLOYEE
 GROUP BY DEPARTMENT_ID
 ORDER BY PERDEPT
) AS TEST T
JOIN DEPARTMENTS
ON D.DEPARTMENT_ID=T.DEPARTMENT_ID;

Это возвращает команду

SQLнеправильно завершено

на линии с AS TEST T

любой и вся помощь очень ценится большое спасибо

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Просто исправьте псевдонимы таблиц, так как у вас есть два псевдонима для подзапроса ( TEST и T ) и нет назначения для D .Настройте SQL с одним псевдонимом для каждой ссылки на таблицу / запрос:

...
(
 SELECT ...
) AS T
JOIN DEPARTMENTS D

С учетом вышесказанного вам даже не нужен подзапрос, поскольку достаточно агрегированного запроса с JOIN, предполагая DEPARTMENT_ID уникален в таблице DEPARTMENTS и не учитывает совокупность в два раза.

SELECT D.DEPARTMENT_NAME, 
       AVG(E.SALARY) AS PERDEPT
FROM EMPLOYEE E
JOIN DEPARTMENTS D
  ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
GROUP BY E.DEPARTMENT_ID, 
         D.DEPARTMENT_NAME
ORDER BY AVG(SALARY)
0 голосов
/ 15 декабря 2018

Этот запрос должен делать то, что вы спрашиваете:

select d.department_name, avg(e.salary) as avg_salary
from salary_department d
left join employee e on e.department_id = d.department_id
group by d.department_name
order by avg(e.salary)
...