group by 和聚合函数使用

group by 和聚合函数使用:每组返回一个统计值
partition by 和聚合函数使用:每组每行返回一个统计值,通常配合row_number排序函数使用

一、在group by后的结果集上使用聚合函数,会作用在分组下的所有记录上。
group by 还有一个隐藏的功能:去重(求和时需要特别注意,因此窗口函数不要和group by 搭配使用,会存在计算漏掉的情况。)
eg:
select v_number,sum(v_number) over(order null) from temp315 group by temp315
1 33
1 33
2 33
30 33
select v_number,sum(v_number) over(order null) from temp315
1 34
1 34
2 34
30 34
二、而如果在partition结果上聚合,千万注意聚合函数是逐条累计运行结果的!(如果想作用所有上求和,可以用(over order null));其中的逐条累计由over(order 字段)体现的。
select v_number,sum(v_number) over(order by v_number) from temp315
累加:相同的值一次全加上
1 2
1 2
2 4
30 34

不需要一次全加上,就用rowid唯一字段进行排序
select v_number,sum(v_number) over(order rowid) from temp315
1 1
1 2
2 4
30 34

总结:
窗口函数,逐条累计,若不需要逐条,可order by null;
窗口函数,相同值一次全加上,若不需要,可用order by rowid唯一限制;

posted @ 2022-03-21 16:23  林汉州win  阅读(978)  评论(0编辑  收藏  举报