一道Hive面试题:累积报表

我们有如下的用户访问数据:

userIdvisitDatevisitCount
u012017-01-215
u022017-01-236
u032017-01-228
u042017-01-203
u012017-01-236
u012017-02-218
u022017-01-236
u012017-02-224

要求使用SQL统计出每个用户的累积访问次数,如下表所示:

用户id月份小计累积
u012017-011111
u012017-021223
u022017-011212
u032017-0188
u042017-0133

分析

首先可以统计出每个用户每月访问次数的结果,如下表:

用户id月份小计
u012017-0111
u012017-0212
u022017-0112
u032017-018
u042017-013

然后以userId相等为条件进行自连接,可以有类似下面的结果:

u01     2017-01 11      u01     2017-01 11
u01     2017-01 11      u01     2017-02 12
u01     2017-02 12      u01     2017-01 11
u01     2017-02 12      u01     2017-02 12

以左边的userId,vMonth,vCount进行分组,然后求最右边一列的和就可以了,当然要加一个现在条件,那就是右边的vMonth要小于等于左边的vMonth。

SQL命令

第一步,创建月份访问统计表:

create table t_vlog_month as
select userId,substr(vDate,1,7) as vMonth, sum(vCount) as mCount
from t_vlog
group by userId,substr(vDate,1,7);

第二步,累积相加:

select t1.userId,t1.vMonth,max(t1.mCount),sum(t2.mCount) as aCount
from t_vlog_month as t1 inner join t_vlog_month as t2 on (t1.userId=t2.userId)
where t2.vMonth <= t1.vMonth
group by t1.userId,t1.vMonth;
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值