over() 粗浅理解:一行对应一个窗口,至于这个窗口的范围是什么就要看over()函数里面对窗口范围的约束是什么了
over()函数中包括三个函数:包括分区partition by 列名
、排序order by 列名
、指定窗口范围rows between 开始位置 and 结束位置
。
我们在使用over()窗口函数时,over()函数中的这三个函数可组合使用也可以不使用。
over() 默认的效果和order by类似,即第一行窗口大小为1,第二行窗口大小为2,以此类推,但是数据只不过没有什统计意义,所以一般还是会在over()里加入partiton by和order by(分组,排序)等,为其赋予意义 如排名等。
over(partition by ) 和 普通的group by的区别:
group by,只能select group by 后面的字段,和一些聚合函数 sum(),avg(),max(),min()等,而用了over(partition by),还能select 别的非partition by 字段 或者能直接“select *”,而且对于join 等有更好的支持。
over()窗口函数的语法结构
分析函数 over(partition by 列名 order by 列名 rows between 开始位置 and 结束位置)
1.over() 默认此时每一行的窗口都是所有的行
select *,count(1) over() from business;
2.over(order by orderdate)
orderdate=1的窗口只有一行,orderdate=2的窗口包括orderdate=2017-01-01,orderdate=2017-01-02
select *,count(1) over(order by orderdate) from business;
3.over(partition by name)每一行根据 name来区分窗口
select *,sum(cost) over(partition by name) from business;
4.over(partition by name order by id) 每一行根据 name来区分窗口,再根据order by 取具体的范围
select *,sum(cost) over(partition by name order by orderdate) from business;
参考
https://www.cnblogs.com/erlou96/p/13590358.html