--活跃用户统计
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
代码如下:

文章讲述了如何使用SQL查询来统计活跃用户(连续两天或三天访问)的总数以及所有用户的平均年龄,涉及的方法包括JOIN操作和ROW_NUMBER函数的应用。
853






