SQL题-连续三天活跃用户统计

文章讲述了如何使用SQL查询来统计活跃用户(连续两天或三天访问)的总数以及所有用户的平均年龄,涉及的方法包括JOIN操作和ROW_NUMBER函数的应用。
--活跃用户统计
CREATE TABLE db.test5(
dt string,
user_id string,
age int)
ROW format delimited fields terminated BY ',';
INSERT overwrite TABLE db.test5 VALUES ('2019-02-11','test_1',23),
('2019-02-11','test_2',19),
('2019-02-11','test_3',39),
('2019-02-11','test_1',23),
('2019-02-11','test_3',39),
('2019-02-11','test_1',23),
('2019-02-12','test_2',19),
('2019-02-13','test_1',23),
('2019-02-15','test_2',19),
('2019-02-16','test_2',19);
-- 需求有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。
-- (活跃用户指连续两天都有访问记录的用户)

-- 有日志如下,请写出代码求得所有用户和活跃用户的总数及平均年龄。(活跃用户指连续三天都有访问记录的用户)
-- type     总数   平均年龄
-- '所有用户'  3    27
-- '活跃用户'  1    19
-- 方式1:join
-- 1- 给原表增加一列:date_add(dt,1) tomorrow
-- 2- 使用新增加的列与原来的表进行join on dt=tomorrow
-- 3- 根据用户id进行去重 然后计算年龄平均值 avg(age)

代码如下:

-- 方式二:row_number()
-- 1- 先对数据进行全局去重
-- 2- 先增加分组排名列 rn
-- 3- 通过当前的dt 减去 rn 得到一个新的日期 new_dt
-- 4- 根据user_id 和 new_dt进行分组,求count(new_dt) >=n,过滤出新的日期相同的用户id

代码如下:

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值