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

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

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

相关推荐

06-26 17:24
已编辑
宁波大学 golang
迷失西雅图:别给,纯kpi,别问我为什么知道
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:23
转人工😡
门口唉提是地铁杀:五次握手了
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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