28. 查询有新注册用户的当天的新用户数量、新用户的第一天留存率

文章目录

        • 题目需求
        • 实现一
        • 题目来源

题目需求

从用户登录明细表(user_login_detail)中查询有新注册用户的当天的新用户数量、新用户的第一天留存率。

首次登录算作当天新增,第二天也登录了算作一日留存。

期望结果如下:

first_login (注册时间)register (新增用户数)retention (留存率)
2021-09-2110.00
2021-09-2210.00
2021-09-2310.00

需要用到的表:

用户登录明细表:user_login_detail

user_id(用户id)ip_address(ip地址)login_ts(登录时间)logout_ts(登出时间)
101180.149.130.1612021-09-21 08:00:002021-09-27 08:30:00
102120.245.11.22021-09-22 09:00:002021-09-27 09:30:00
10327.184.97.32021-09-23 10:00:002021-09-27 10:30:00

实现一

-- 4)计算出 每一天 新增用户的 留存率
select login_ts as first_login,register,-- 第二天活跃的用户数-- sum(whe),cast(sum(whe) / register as decimal(16, 2)) as retention
from (select t2.login_ts,     -- 日期At2.register                                           as register,t2.user_id,t3.day_all_user, -- 日期A+1,活跃的所有用户 user_id-- 判断该新增用户在 注册第二天是否活跃。1:活跃, 0: 不活跃if(array_contains(t3.day_all_user, t2.user_id), 1, 0) as whefrom (-- 2) 统计每个日期的新用户数量select login_ts,count(*) over (partition by login_ts) as register,user_idfrom (-- 1) 统计每个用户的首次登录日期select distinct user_id,first_value(date_format(login_ts, 'yyyy-MM-dd'))over (partition by user_id order by login_ts) as login_tsfrom user_login_detail) t1) t2left join(-- 3) 统计每个日期 活跃用户的user_idselect date_format(login_ts, 'yyyy-MM-dd') login_ts,collect_set(user_id) as             day_all_userfrom user_login_detailgroup by date_format(login_ts, 'yyyy-MM-dd')) t3-- 日期A = 日期(B-1)。 B=A+1on t2.login_ts = date_add(t3.login_ts, -1)) t4
group by login_ts, register;

题目来源

http://practice.atguigu.cn/#/question/28/desc?qType=SQL


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部