用Hive实现累计求和,求前三个月的累计销售额
一般涉及累计销售的可以通过窗口函数来实现,当然也可以用最基本的自关联实现。相比较自关联的话,窗口函数理解起来会更直观简单,下面介绍一下用窗口函数来实现累计求值。
代码片
.
语法:sum() over(rows between ... and ...)
其实窗口函数顾名思义就是你定义一个类似于窗口一样的边界,定义一个上边界和下边界即可。
也就是说over函数中你要配合rows between … and… 来定义一个边界,between 后面接上边界,and后面接下边界。
rows between …(起始)… and …(结束)…
当然你也可以理解为
rows between …(上边界)… and …(下边界)…
下面举个简单的例子
这是4个月的销售情况
mounth | money |
---|---|
1 | 50 |
2 | 30 |
3 | 60 |
4 | 90 |
假如这是4个月的销售额,现在有一个需求就是要实现,连续三个月销售额
那么你就可以
代码片
.
select mounth
,sum(money) over(order by mounth rows between 2 preceding and current row)
from table_01
很多人会有疑问,不是前三个月吗,为什么会是2而不是3。因为你这个sql的意思是当前行的前2行,求前三月也就是当前行的前两行加上当前行就是3个月。
最终的结果是:
mounth | money |
---|---|
1 | 50 |
2 | 80 |
3 | 140 |
4 | 180 |
这里还需记住几个固定的格式,会比较经常遇到。
代码片
.
rows between unbounded preceding and current row 从第一行到当前行(求累计到当前月的销售额)
代码片
.
rows between unbounded preceding and unbounded following 从第一行到最后一行(从第一行到最后一行,适合分组后用)