sql之累计求和

需求:求出每个域名的当月点击总量和累计点击总量
样本数据:

domaintimetraffic(T)
gifshow.com2019/01/015
yy.com2019/01/014
huya.com2019/01/011
gifshow.com2019/01/206
gifshow.com2019/02/018
yy.com2019/01/205
gifshow.com2019/02/027

解答思路1:

  1. 先求出每个域名的每月点击总量和。
  2. 将上一步生成的结果表进行自关联,做笛卡尔积。
  3. 从上一步的结果中,进行分组查询,分组的字段是a.domain a.month
    求月累计值: 将b.month <= a.month的所有b.salary求和即是月累计值。
select A.domain, A.month, max(A.traffics) as traffics, sum(B.traffics) as totals from 
(select t.domain, t.month, cast(sum(t.traffic) as Int) as traffics from (select domain, concat(substr(time,0,4),substr(time,6,2)) as month, traffic from user_flow)t group by domain, month) A 
inner join 
(select t.domain, t.month,cast(sum(t.traffic) as Int) as traffics from (select domain, concat(substr(time,0,4),substr(time,6,2)) as month, traffic from user_flow)t group by domain, month) B
on A.domain=B.domain
where B.month <= A.month
group by A.domain,A.month
order by A.domain,A.month;

解答思路2:(一般采用这种方式)

select 
    t.domain,
    t.month,
    sum(t.traffic) as traffics,
    SUM(sum(t.traffic)) OVER (PARTITION BY domain ORDER BY month) as totals 
from 
    (select domain, from_unixtime(unix_timestamp(time,'yyyy/MM/dd'),'yyyy-MM') as month, traffic from user_flow) t 
group by domain, month;

输出:

domaintimetrafficstotals
gifshow.com2019-011111
gifshow.com2019-021526
yy.com2019-0199
huya.com2019-0111
  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值