题解 | #统计活跃间隔对用户分级结果#

统计活跃间隔对用户分级结果

https://www.nowcoder.com/practice/6765b4a4f260455bae513a60b6eed0af

with t1 as(
# 1. 新晋用户(近7天新增),用户注册表
select uid, min(date_format(in_time,"%Y-%m-%d")) as login from tb_user_log
group by uid
having datediff((select max(date_format(out_time,"%Y-%m-%d")) from tb_user_log),login) < 7
), t2 as(
# 2. 忠实用户(近7天活跃过且非新晋用户),用户在线表,剔除t1
select * from(
(select uid, date_format(in_time,"%Y-%m-%d") as dt from tb_user_log)
union
(select uid, date_format(out_time,"%Y-%m-%d") as dt from tb_user_log)
) t
where datediff((select max(date_format(out_time,"%Y-%m-%d")) from tb_user_log),dt) < 7 and uid not in (select uid from t1)
), t3 as(
# 3. 沉睡用户(近7天未活跃但更早前活跃过)
select * from(
(select uid, date_format(in_time,"%Y-%m-%d") as dt from tb_user_log)
union
(select uid, date_format(out_time,"%Y-%m-%d") as dt from tb_user_log)
) t
where datediff((select max(date_format(out_time,"%Y-%m-%d")) from tb_user_log),dt) >= 7 and
datediff((select max(date_format(out_time,"%Y-%m-%d")) from tb_user_log),dt) <30 and uid not in (select uid from t2)
), t4 as(
# 4. 流失用户(近30天未活跃但更早前活跃过)
select * from(
(select uid, date_format(in_time,"%Y-%m-%d") as dt from tb_user_log)
union
(select uid, date_format(out_time,"%Y-%m-%d") as dt from tb_user_log)
) t
where datediff((select max(date_format(out_time,"%Y-%m-%d")) from tb_user_log),dt) >= 30 and
uid not in (select uid from t2) and uid not in (select uid from t3)
)

(select '新晋用户' as user_grade, round(count(distinct uid)/(select count(distinct uid) from tb_user_log),2) as ratio from t1)
union
(select '忠实用户' as user_grade, round(count(distinct uid)/(select count(distinct uid) from tb_user_log),2) as ratio from t2)
union
(select '沉睡用户' as user_grade, round(count(distinct uid)/(select count(distinct uid) from tb_user_log),2) as ratio from t3)
union
(select '流失用户' as user_grade, round(count(distinct uid)/(select count(distinct uid) from tb_user_log),2) as ratio from t4)
order by ratio desc
select user_grade, 
round(count(uid)/(select count(distinct uid) from tb_user_log),2) as ratio 
from(
# 2. 查询最近一次登陆时间与max_time之差,注册时间与max_time之差来分组
select uid, case
when datediff((select max(in_time) from tb_user_log),last_time)<7 and datediff((select max(in_time) from tb_user_log),first_time)<7 then '新晋用户'
when datediff((select max(in_time) from tb_user_log),last_time)<7 and datediff((select max(in_time) from tb_user_log),first_time)>=7 then '忠实用户'
when datediff((select max(in_time) from tb_user_log),last_time)>=7 and datediff((select max(in_time) from tb_user_log),last_time)<30 then '沉睡用户'
else '流失用户'
end as user_grade
from (
# 1. 查询每个用户最近一次的登陆时间和用户注册时间
select uid, 
date_format(max(in_time),'%Y-%m-%d') as last_time,
date_format(min(in_time),'%Y-%m-%d') as first_time
from tb_user_log
group by uid
) t
) t1
group by user_grade
order by ratio desc

全部评论

相关推荐

原来已经一年了,因为没有加任何实验室没有学长学姐带,再一次偶然的机会下刷到我们学校的牛肉哥,和他聊天之后发现他也没加实验室能进大厂,我就燃起了希望,去年大概&nbsp;4&nbsp;月份找好路线&nbsp;零基础&nbsp;开始学&nbsp;5&nbsp;月背八股和开始刷算法很难受&nbsp;7-8&nbsp;月焦虑躯体化害怕找不到实习&nbsp;9&nbsp;月找到一家像样的小厂去实习了&nbsp;4&nbsp;个月大三上期末考试结束之后&nbsp;1&nbsp;月份回来边实习边准备工作压力很大&nbsp;当时只有字节、百度、商汤的面试,字节三面挂了,百度&nbsp;oc,商汤&nbsp;二面挂(差评&nbsp;无效面试),之后来深圳百度实习之后还是觉得不甘心一直没把算法和八股扔下一直在准备,百度实习的时候&nbsp;mt&nbsp;交给我一个特别重要的工作数据库迁移(特别感谢&nbsp;mt&nbsp;,这个需求学到了很多东西处理了一堆线上问题),本来看着暑期他们面试都很困难,然后听说百度要涨实习薪资(然而&nbsp;5&nbsp;月并没有涨),就想着留在百度吧也懒得面试了,4&nbsp;月&nbsp;20&nbsp;多的时候字节&nbsp;hr&nbsp;打电话约面问我要不要尝试一下询问了&nbsp;1&nbsp;月份三面为啥会挂有没有学习&nbsp;ai&nbsp;知识(因为字节这边后端岗位偏&nbsp;ai),我来到百度之后全面拥抱&nbsp;AI&nbsp;也认识了我的好兄弟&nbsp;X&nbsp;哥,他在百度&nbsp;XX&nbsp;部门&nbsp;Agent&nbsp;实习,他属于是我&nbsp;Agent&nbsp;的启蒙老师,来百度之后一直在了解&nbsp;AI&nbsp;这一块,我就接受了字节的面试,一面的时候&nbsp;20&nbsp;分钟实习拷打然后突然说&nbsp;30&nbsp;分钟代码考核我心就凉了以为是&nbsp;kpi,算法题是手撕高并发安全下的令牌桶限流器,我写了整整&nbsp;80&nbsp;多行代码最后也写出来了,但是从来没看到过出这种题能&nbsp;oc&nbsp;的我也就不管了,后边面试也是很顺利但是流程有点长可能一直在横向吧总结结果是好的!!!感谢这一年努力的自己和遇到的各位互联网大佬分享的知识!!!ps&nbsp;图二纯感慨&nbsp;(觉得🍬请不要喷我)欢迎大家一起交流学习呀!!!!
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务