SQL中累计求和与滑动求和函数sum() over()用法

2.5、题目:请统计各销售团队在各月及其之后2个月的累计业绩,如3月则统计3、4、5这三个月的成交额。

解题思路:以上三题共性是都要做分组且需要根据统计月份滑动求和,先对其做分组后的滑动求和,再调参设置滑动的范围,需要在over函数中使用range between and指定窗口的大小,向前使用preceding,向后使用following。如2 preceding and 1 following指定的窗口包括当前行、当前行前面两行以及当前行后面一行,总共4行。

SQL逻辑:

近3个月累计业绩(含统计月)值的滑动范围参数我们可以写成“range between 2 preceding and 0 following”或“range between 2 preceding and current row”

SELECT team_name --团队
,month --统计月份
,gmv --当月成交额
--对gmv按照team_name分组求和,相当于小组gmv的小计
,SUM(gmv) OVER(partition by team_name order by month range between 2 preceding and 0 following) AS pay_amt --销售组累计成交额
FROM dws_js_team_gmv
GROUP BY team_name
--如果只是求单独的各销售团队成交额,那用sum()就能实现,以上需求和分组求和的差异是既要分组求和还需要保留分月数据
SELECT team_name,SUM(gmv) AS pay_amt
FROM dws_js_team_gmv
GROUP BY team_name

如果希望滑动求和不包含统计月的值,有三种实现思路:

①用近4个月的滑动求和(含统计月)-统计月的值;

②将滑动区间参数配置成“range between 3 preceding and 1 preceding”

③将滑动区间参数配置成“range between 3 preceding and -1 following”

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值