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

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

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

select user_grade, round(num/sum(num) over(partition by pa order by num desc rows between unbounded preceding and unbounded following) ,2)
from (
select user_grade,count(*) as num , 'ab' as pa
from (
SELECT '忠实用户' as user_grade,a.uid
FROM (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) BETWEEN date_sub('2021-11-04', interval 6 day)
			AND '2021-11-04'
	) a
JOIN (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) < date_sub('2021-11-04', interval 6 day)
    ) b 
    ON a.uid = b.uid
    group by a.uid
union all
SELECT '新晋用户' as user_grade, a.uid
FROM (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) BETWEEN date_sub('2021-11-04', interval 6 day)
			AND '2021-11-04'
	) a
left JOIN (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) < date_sub('2021-11-04', interval 6 day)
    ) b 
    ON a.uid = b.uid
    where b.uid is null
    group by a.uid
union all
SELECT '沉睡用户' as user_grade, b.uid
FROM (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) BETWEEN date_sub('2021-11-04', interval 6 day)
			AND '2021-11-04'
			and artical_id != 0
	) a
right JOIN (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) < date_sub('2021-11-04', interval 6 day)
	and artical_id != 0
    ) b 
    ON a.uid = b.uid
    where a.uid is null 
    group by b.uid
union all
SELECT '流失用户' as user_grade, b.uid
FROM (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) BETWEEN date_sub('2021-11-04', interval 29 day)
			AND '2021-11-04'
	) a
right JOIN (
	SELECT *
	FROM tb_user_log
	WHERE DATE (in_time) < date_sub('2021-11-04', interval 29 day)
    ) b 
    ON a.uid = b.uid
    where a.uid is null 
    group by b.uid
)h
group by user_grade
) lg

全部评论

相关推荐

06-12 10:50
门头沟学院 Java
你的不定积分没加C:我怎么在学院群看到了同样的话
点赞 评论 收藏
分享
半解316:内容充实,细节需要修改一下。 1,整体压缩为一页。所有内容顶格。 2,项目描述删除,直接写个人工作量 修改完之后还需要建议,可以私聊
点赞 评论 收藏
分享
不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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