9

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

假设我选择了 10 列,其中 5 列是聚合列。所以我需要按其他 5 列分组。我什至可以通过不执行 Groupby 并在我想要派生的每个聚合列上使用 over (partition by) 子句来实现相同的目的。

我不确定哪个更适合仓库或一般情况。

4

3 回答 3

21

它们是不相同的。

这将返回 3 行:

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

DEPTNO C
------ -
10     3
20     5
30     6

这将返回 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
于 2011-07-27T16:26:19.227 回答
7

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

于 2012-10-02T14:02:02.223 回答
-1

可以在PARTITON BY一个查询中执行此操作以获取不同的计算或分组依据。

select
     DISTINCT deptno, count(*) over (partition by deptno) c,
     COUNT(*) OVER (PARTITION BY NULL) AS TOTAL
from emp;
于 2016-10-28T14:00:43.620 回答