partition byとgroup byの比較を詳しく説明する。


今日はたぶんpartition byとgroup byの違いが分かりました。
1.group byはグループ関数であり、partition byは分析関数(そしてsum()などは集計関数)である。
2.実行順において、
以下はsqlキーワードを常用する優先度です。from > where > group by > having > order bypartition byは以上のキーワードを適用した後、実際にselectを実行した後、結果集の上でpartitionを行います。
3.partition byはgroup byに比べて、すべてのデータを保持した上で、いくつかのフィールドに対してのみパケットの並べ替えを行うことができます。group byはグループに参加するフィールドと集計関数の結果(excel中のpivotのような)だけを保持します。
partition by

group by

4.partitionの結果に集計するなら、集計関数は逐条累積運行結果であることに注意してください。グループby後の結果セットにおいて、集計関数が使用され、パケット下のすべての記録に作用する。
データは以下の通りです

SQL 1

select a.cc,a.item,sum(a.num)
from table_temp a
group by a.cc,a.item
Result 1

11条グループbyを記録した後は10条で、そのうちcc='cn'and item='8.1.1'に対応する2つの記録のnumは3.
SQL 2

select a.cc,a.num, min(a.num) over (partition by a.cc order by a.num asc) as amount
from table_temp a
group by a.cc,a.num;

select a.cc,a.num, min(a.num) over (partition by a.cc order by a.num desc) as amount
from table_temp a
group by a.cc,a.num;
Result 2

二つのsqlの唯一の違いはa.numの並べ替えにありますが、結果の赤枠のデータ比較からamount値は同じではなく、第二の結果セットは最小値1ではないことが分かります。
ここではパーティション後の結果集に集計関数を使う場合、集計関数は逐次累積計算値です。
実はpartition byは常にrow_number()overと一緒に使用します。

select a.*, row_number() over (partition by a.cc,a.item order by a.num desc) as seq
from table_temp a

ここで、partition byとgroup byの比較を詳しく説明する文章を紹介します。partition byとgroup byの内容については、以前の文章を検索してください。または下記の関連記事を引き続きご覧ください。これからもよろしくお願いします。