Hive面试题 累积报表

如下的用户访问数据

userId  visitDate   visitCount
u01 	2017/1/21   5
u02 	2017/1/23   6
u03 	2017/1/22   8
u04 	2017/1/20   3
u01 	2017/1/23   6
u01 	2017/2/21   8
U02 	2017/1/23   6
U01 	2017/2/22   4

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

用户id    月份  小计  累积
u01 	2017-01 11     11
u01 	2017-02 12     23
u02 	2017-01 12     12
u03 	2017-01 8      8
u04 	2017-01 3      3

1.创建表,添加数据

##创建表
CREATE TABLE visitTable(userId  VARCHAR(20),visitDate  DATE,visitCount INT);
##添加数据
INSERT INTO visitTable VALUES('u01','2017/1/21','5');
INSERT INTO visitTable VALUES('u02','2017/1/23','6');
INSERT INTO visitTable VALUES('u03','2017/1/22','8');
INSERT INTO visitTable VALUES('u04','2017/1/20','3');
INSERT INTO visitTable VALUES('u01','2017/1/23','6');
INSERT INTO visitTable VALUES('u01','2017/2/21','8');
INSERT INTO visitTable VALUES('u02','2017/1/23','6');
INSERT INTO visitTable VALUES('u01','2017/2/22','4');

2.获取每个用户每个月得访问总数并生产表

##获取每个用户每个月得总数
##SUBSTR:截取
##获取用户截取后的月份信息,用户id,月份访问总数信息,通过截取后的月份信息与用户id进行分组生成用户月份总访问表
CREATE TABLE myMonthCount AS  
SELECT userId,SUBSTR(visitDate,1,7)  AS mydate,SUM(visitCount) AS mycount 
FROM visitTable 
GROUP BY SUBSTR(visitDate,1,7),userId;

查询的结果
在这里插入图片描述

3.获取用户每月访问表后,进行自查询

##使用自查询,显示右边表的id,日期,左边表的月份访问量,总访问量
##使用两张表(用户每月访问表)的id进行关联并且左表的月份要小于等于右表的月份
##按照右表的id与时间进行分组
SELECT  m2.userId,m2.mydate,MAX(m1.mycount),SUM(m1.mycount) 
FROM  myMonthCount m1 
JOIN myMonthCount m2 
ON m1.userId = m2.userId 
WHERE m1.mydate <= m2.mydate 
GROUP  BY m2.userId,m2.mydate;

查询的结果
在这里插入图片描述

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值