显示每个位置的平均工资和位置

display the avg salary and loc of each location

编写查询以显示每个位置的 LOC 和平均工资。(标量子查询)。 LOC 在 dept table 中,salary 在 emp table 中。 我必须使用标量子查询来执行此操作。

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

请使用以下查询。您必须加入 emp 和 dept table 并获取结果。

使用连接:

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;

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

注意:如果您需要使用 GROUP BY,则必须在 SELECT 中使用 DISTINCT

  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

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

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

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