【问题标题】:display the avg salary and loc of each location显示每个位置的平均工资和位置
【发布时间】:2020-07-11 17:16:48
【问题描述】:

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

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

【问题讨论】:

    标签: sql oracle subquery scalar-subquery


    【解决方案1】:

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

    【讨论】:

    • 你的答案是完全正确的,它会获取正确的行,但我必须用标量子查询来做到这一点。所以,你能帮帮我吗?
    • 也为您提供了子查询
    • 不,它说(ORA-00979:不是 GROUP BY 表达式 00979.00000 - “不是 GROUP BY 表达式”)
    • 它应该可以工作,我也添加了工作截图。您使用的是哪个版本的 oracle?
    • 可能是别名问题,已编辑查询。请立即尝试
    【解决方案2】:

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

    注意:如果您需要使用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
    

    【讨论】:

    • 它说(ORA-00979:不是 GROUP BY 表达式 00979. 00000 - “不是 GROUP BY 表达式”)。我不知道它有什么问题。
    • 编辑了我的答案,请再试一次。这是因为 group by 声明。 @MAYANKRAJ
    • 我一直在使用 11g 太相信我了。 @MAYANKRAJ
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 1970-01-01
      • 1970-01-01
      • 2019-12-11
      • 2019-09-03
      • 1970-01-01
      • 2013-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多