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

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

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

全部评论

相关推荐

03-02 08:18
集美大学 Java
钱嘛数字而已:没有赛事奖项么?另外,项目经历字有点多哈,建议突出一下重点:用的什么技术,解决什么问题,达到什么效果。
大家都开始春招面试了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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