Hive窗口函数练习题

每个用户截止到每月为止的最大单月访问次数和累计到该月的总访问次数

0: jdbc:hive2://node03:10000> create table view_log(
. . . . . . . . . . . . . . > name string,
. . . . . . . . . . . . . . > time string,
. . . . . . . . . . . . . . > views int)
. . . . . . . . . . . . . . > row format delimited fields terminated by ',';

0: jdbc:hive2://node03:10000> load data local inpath '/root/view_log' into table view_log;
# 数据
A,2015-01,5
A,2015-01,15
B,2015-01,5
A,2015-01,8
B,2015-01,25
A,2015-01,5
A,2015-02,4
A,2015-02,6
B,2015-02,10
B,2015-02,5
A,2015-03,16
A,2015-03,22
B,2015-03,23
B,2015-03,10
B,2015-03,11

# 期望结果
用户  月份      最大访问次数  总访问次数       当月访问次数
A     2015-01          33              33               33
A     2015-02          33              43               10
A     2015-03          38              81               38
B     2015-01          30              30               30
B     2015-02          30              45               15
B     2015-03          44              89               44
select 
	name,time,
	-- 使用窗口分析函数进行比较,从每个分区第一行开始比较,第一行最大值为自己,下移到第二行,将第二行和第一行作比较,获取较大值,往下同理
	max(month_views) over(partition by name order by time rows between unbounded preceding and current row) max_views,
	-- 使用窗口分析函数进行向下累加,从第一行开始,第一行累加得到自己,到第二行,将第一行和第二行相加得到结果,向下同理
	sum(month_views) over(partition by name order by time rows between unbounded preceding and current row) month_view_add,
	month_views 
from 
	-- 第一步使用group by按照用户名和日期聚合求出单月的总额作为子表
	(select name,time,sum(views) month_views from view_log group by name,time) tb1
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值