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

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

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

WITH TotalUIDs AS (  
    SELECT COUNT(DISTINCT uid) AS total_uids  
    FROM tb_user_log  
) --这里用临时表计算了用户的总数量
select
distinct user_grade,round(count(uid) over(partition by user_grade)/(SELECT total_uids FROM TotalUIDs),2) as ratio
from
(
	select
	t3.uid,
	case 
		when last_dt_diff<7 and first_dt_diff!=last_dt_diff then '忠实用户'
		when last_dt_diff<7 and first_dt_diff=last_dt_diff then '新晋用户'
		when last_dt_diff>=7 and last_dt_diff<30 then '沉睡用户'
		when last_dt_diff>=30 then '流失用户'
	end as user_grade
	from
	(
	select
	t1.uid,
	TIMESTAMPDIFF(DAY,t1.dt,'2021-11-04') as first_dt_diff,--主要是计算一个用户的最近登录和最远登录
	TIMESTAMPDIFF(DAY,t2.dt,'2021-11-04') as last_dt_diff
	from
	(
	select
	uid,min(date_format(in_time,'%Y-%m-%d')) dt
	from
	tb_user_log 
	group by uid
	) t1
	left join 
	(
	select
	uid,max(date_format(out_time,'%Y-%m-%d')) dt
	from
	tb_user_log 
	group by uid
	) t2
	on t1.uid=t2.uid
	) t3
) t4

全部评论

相关推荐

04-29 22:35
门头沟学院 Java
牛友说改了名字能收到offer:旧图新发查看图片
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务