-2

编写查询以显示每个位置的 LOC 和平均工资。(标量子查询)。LOC 在 dept 表中,salary 在 emp 表中。我必须用标量子查询来做到这一点。

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

3 回答 3

0

请使用以下查询。您必须加入 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;

在此处输入图像描述

于 2020-07-11T17:24:55.860 回答
0

如果您真的必须使用标量子查询,那么您可以在下面使用。

注意:如果你需要使用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
于 2020-07-11T17:31:45.783 回答
0

不需要在查询结束时按 loc 分组

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

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

于 2020-08-14T17:02:42.967 回答