开窗函数有无partit by,oder by的区别
这里是引用:为了方便自己查看,图片和代码引用博主tang_xuming,如有冒犯,联系删除
1.partition by和order by同时存在,按照排序连续累加,相同排名的需要将相同排名对应的数值都相加作为相加后的结果,然后继续累加;(只在自己的分组内累加,到下一分组重新开始累加,如图第一列的GS和SX)
如果只存在order by,无partition by,那么就从第一个位置开始一直累加到结束,无分组限制;用图中的例子来说就是GS和SX的分界线处,第一个SX对应的最后一列RST应该是473+23的和496,然后依次累加到最后。
select prov_name, city_name, val_cnt,
sum(val_cnt) over(partition by prov_name ORDER BY val_cnt) AS rst
from test_orer_partition_by ;
2.只有partition by,无order by,计算partition by分组后的所以该分组内对应数值的和;
select prov_name, city_name, val_cnt,
sum(val_cnt) over(partition by prov_name) AS rst
from test_orer_partition_by ;
3.没有partition by和order by,计算所有数据总和
select prov_name, city_name, val_cnt,
sum(val_cnt) over() AS rst
from test_orer_partition_by ;