简述电子政务网站设计的技术,网站加速免费,网上销售哪些平台免费,网站前台架构首次登录算作当天新增#xff0c;第二天也登录了算作一日留存。可以理解为#xff0c;在10月1号登陆了。在10月2号也登陆了#xff0c;那这个人就可以算是在1号留存
今日留存率 #xff08;今日登录且明天也登录的用户数#xff09; / 今日登录的总用户数 * 100% 解决思…首次登录算作当天新增第二天也登录了算作一日留存。可以理解为在10月1号登陆了。在10月2号也登陆了那这个人就可以算是在1号留存
今日留存率 今日登录且明天也登录的用户数 / 今日登录的总用户数 * 100% 解决思路
这类问题主要借助left join根据原表的数据先去找到每个用户最先登录的时间这个就是通过对用户group by然后搜索date_format(min(login_ts),‘yyyy-MM-dd’)。这样就得到一个表第一列是用户id第二列就是每一个用户第一次登录的日期。
之后用这个新表left join原表数据但是这个条件不仅是id相等还要有个t1.user_idt2.user_id and datediff(date_format(t2.login_ts,‘yyyy-MM-dd’),t1.first_login)1
说实话这个多条件join的还确实没遇到过。这样符合条件的就会被增加到后面不符合的赋空值。【当然也可以不多条件join直接就是两个表的user_id一样那这样再计算新增人数和留存人数的时候就不能直接通过count(列名字)来计算了还需要去重和判断天数关系】比如下图这样 这样就可以根据first_login分组group by计算countt1.id就是每日新增人数然后count(连接上的表的列信息)就是后续一天也登陆的人数。
代码
selectt3.first_login,t3.register,t3.remain_1/t3.register retention
from(selectt1.first_login,count(t1.user_id) register,count(t2.user_id) remain_1from(selectuser_id,date_format(min(login_ts),yyyy-MM-dd) first_loginfromuser_login_detailgroup byuser_id)t1left joinuser_login_detail t2ont1.user_idt2.user_id and datediff(date_format(t2.login_ts,yyyy-MM-dd),t1.first_login)1group byt1.first_login
)t3
总结一下
其实这类问题的关键在于你要想办法将每个用户的最初登录时间和第二天登录时间这两个信息放到一行中。这就是先求出来初次登陆时间后然后借助这个表进行left join之后再此基础上以最初登录时间进行分组group by再用聚合函数即可。