9

Oracleウェアハウスからレコードをフェッチするためのクエリを作成しています。いくつかのテーブルで結合を使用する単純なSelectクエリであり、集計する列がほとんどありません。したがって、残りの列でGroupbyを使用することになります。

たとえば、10個の列を選択し、そのうち5個が集計列であるとします。したがって、他の5つの列でグループ化する必要があります。Groupbyを実行せず、派生させたい各集計列にover(paritition 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を 1 つのクエリで実行して、さまざまな計算やグループ化を行うことができます。

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