отображать среднюю зарплату и lo c в каждом месте - PullRequest
0 голосов
/ 11 июля 2020

Напишите запрос для отображения LO C и средней заработной платы в каждом месте (Скалярный подзапрос). LO C находится в таблице департаментов, а зарплата - в таблице emp. Я должен сделать это с помощью скалярного подзапроса.

select loc,(select avg(sal) from emp) 
from dept group by loc;

Ответы [ 3 ]

0 голосов
/ 11 июля 2020

Если вам действительно нужно использовать скалярный подзапрос, вы можете использовать ниже.

Примечание: если вам нужно использовать GROUP BY, вы должны вместо этого использовать DISTINCT в своем SELECT.

  WITH DEPT
     AS (SELECT 'TR' AS LOC, 1 DEPTID FROM DUAL
         UNION ALL
         SELECT 'FR' AS LOC, 2 DEPTID FROM DUAL),
     EMP
     AS (SELECT 15 AS SAL, 1 DEPTID FROM DUAL
         UNION ALL
         SELECT 20 AS SAL, 2 DEPTID FROM DUAL
         UNION ALL
         SELECT 35 AS SAL, 1 DEPTID FROM DUAL
         UNION ALL
         SELECT 45 AS SAL, 2 DEPTID FROM DUAL
         )
  SELECT D.LOC,
         (SELECT AVG(SAL)
            FROM EMP E
           WHERE D.DEPTID = E.DEPTID)
    FROM DEPT D
0 голосов
/ 14 августа 2020

Группировать по lo c в конце запроса не нужно

select loc,
(select avg(sal) from emp 
where emp.deptno = dept.deptno) avg_sal
from dept;

https://i.stack.imgur.com/f3q28.png

0 голосов
/ 11 июля 2020

Пожалуйста, используйте запрос ниже. Вам необходимо присоединиться к таблице emp и dept и получить результаты.

Использование соединения:

select d.loc, avg(e.sal) from emp e
inner join dept d
on (e.dept_id = d.dept_id)   -- Changed the column it the foreign key is something else
group by d.loc;

Использование подзапроса:

select d.loc, (select avg(sal) from emp e where d.dept_id = e.dept_id)
from dept d group by d.loc;

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...