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

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

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

select tt.user_grade, round(cnt/(sum(cnt) over()),2) ratio
from (
	select t.level user_grade,count(*) cnt
	from ( -- 对用户进行分类
			select 
			uid,
			case when (datediff(M_time,max_time) <= 6 and datediff(M_time,min_time)>=7) then '忠实用户' -- 近7天活跃:今天-最近活跃日期 <=6,因为包含了当天;非新晋用户:今天-最早活跃时间>=7
			when datediff(M_time,min_time)<=6 then '新晋用户' -- 一定要算6,因为包含当天
			when (datediff(M_time,max_time)>=7 and datediff(M_time,max_time)<30) then '沉睡用户' 
			else '流失用户'
			end level
		from 
		(-- 用户最早进入时间,最近活跃时间,“今天”即所有日期的最大日期
		select 
			uid,
			min(date(in_time)) min_time, -- 最早活跃时间
			max(date(in_time)) max_time, -- 最近活跃时间
		,	(select max(date(in_time)) from tb_user_log) M_time -- “今天”
		from tb_user_log
		group by uid
		) tb
	)t
	group by t.level
) tt
group by tt.user_grade
order by ratio desc -- 按比例降序
全部评论
大佬你好,最外层为什么要调用sum() over()这个函数呀,在自己写得时候容易漏掉over(),求解惑,感谢!!
点赞 回复 分享
发布于 2022-01-31 15:20

相关推荐

这算盘打的
程序员小白条:都这样的,都是潜规则,你自己说可以实习一年就行了,实习可以随便跑路的
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-10 11:33
点赞 评论 收藏
分享
线性袋鼠:别听牛客上一帮伪人在那说,小厂不能去,必须去大厂,听他们放屁吧。学院本+一些一本最终的归宿就是中小厂,大厂那么好进吗
我的实习日记
点赞 评论 收藏
分享
程序员小白条:太晚了,看别人找到实习了才投的话,自己本身就没啥准备,计划太晚咯,只能吞苦果子
点赞 评论 收藏
分享
07-09 19:25
门头沟学院 Java
这是要把每一个投校招的都开盒吗?
26届之耻将大局逆转:裁人的时候一次性追回餐费
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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