赞
踩
--活跃用户统计 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
代码如下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。