GROUP BY对两个未联接的表有何作用?

时间:2019-02-16 15:40:43

标签: sql oracle

我在这里分享一本书中的代码。 在这里,分组依据位于两个字段中,这些字段来自不同的UNJOINED表(A和B)。在我看来,您可以按未连接的表中的字段进行分组似乎并不直观。谁能解释这怎么可能?

    select a.deptno from emp a, 
    (select max(avg_sal) max_avg_sal from (select  
    avg(sal) avg_sal from emp group by deptno) ) b 
    group by a.deptno, b.max_avg_sal 
    having avg(a.sal) = b.max_avg_sal

根据书的结果

    **deptno**
    10

1 个答案:

答案 0 :(得分:1)

这只是一个可怕的代码示例。我不推荐在from子句中使用逗号的任何书籍。

这只是from子句中的子查询。在join子句中,它具有where条件。

您可以使用JOIN代替逗号。并且可以使用WHERE代替ON

有更好的方式编写这样的查询。优先于JOIN之前进行汇总。我会去的:

  • row_number()rank()max()的窗口函数。
  • where子句中的相关子查询。
  • 可以使员工获得最高薪水的特定汇总功能。

此列表上的最后一项是预聚合。