我在这里分享一本书中的代码。 在这里,分组依据位于两个字段中,这些字段来自不同的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
答案 0 :(得分:1)
这只是一个可怕的代码示例。我不推荐在from
子句中使用逗号的任何书籍。
这只是from
子句中的子查询。在join
子句中,它具有where
条件。
您可以使用JOIN
代替逗号。并且可以使用WHERE
代替ON
。
有更好的方式编写这样的查询。优先于JOIN
之前进行汇总。我会去的:
row_number()
,rank()
或max()
的窗口函数。where
子句中的相关子查询。此列表上的最后一项是预聚合。