在Oracle中分组vs分区

8 sql oracle data-warehouse analytic-functions

我正在编写一个查询来从Oracle仓库中获取记录.它是一个简单的Select Query,在几个表上有连接,我有很少的列要聚合.因此,我最终在其余列上使用Groupby.

假设我正在挑选大约10列,其中5列是聚合列.所以我需要在其他5列上分组.我甚至可以通过不执行Groupby并在我想要派生的每个聚合列上使用over(paritition by)子句来实现相同目的.

我不确定哪个更适合仓库或一般.

Ton*_*ews 20

他们不一样.

这将返回3行:

select deptno, count(*) c from emp group by deptno;

DEPTNO C
------ -
10     3
20     5
30     6
Run Code Online (Sandbox Code Playgroud)

这将返回14:

select deptno, count(*) over (partition by deptno) c from emp;


DEPTNO C
------ -
10     3
10     3
10     3
20     5
20     5
20     5
20     5
20     5
30     6
30     6
30     6
30     6
30     6
30     6
Run Code Online (Sandbox Code Playgroud)

  • 我想如果可以使用GROUP BY完成,那就更好了.分析函数应该用于您希望单个行加上一些聚合信息的情况 - 例如rank()示例. (5认同)
  • 我想了解.如果我错了,请纠正我.所以,如果我得到第二个查询的不同,它将给我第一个查询结果.我只使用分区来基于分区列对某些子句执行rank()并获得第一个等级左右.在什么情况下第二个查询结果会有用?谢谢 (2认同)

Anu*_*hne 6

检查此链接 聚合和分析函数之间的主要区别在于,尽管分析函数提供聚合结果,但它们不会对结果集进行分组.它们会在每条记录中多次返回组值.