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

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

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

全部评论

相关推荐

昨天 16:50
已编辑
长安大学 C++
晓沐咕咕咕:评论区没被女朋友好好对待过的计小将可真多。觉得可惜可以理解,毕竟一线大厂sp。但是骂楼主糊涂的大可不必,说什么会被社会毒打更是丢人。女朋友体制内生活有保障,读研女朋友还供着,都准备订婚了人家两情相悦,二线本地以后两口子日子美滋滋,哪轮到你一个一线城市房子都买不起的996清高计小将在这说人家傻😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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