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

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

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

select c,round(count(uid)/max(num),2) ratio 
from(
SELECT uid,
    CASE 
        WHEN MIN(DATE(in_time))<=date_sub(m.m_day,interval 7 day) and MAX(DATE(in_time)) >=  date_sub(m.m_day,interval 6 day) THEN "忠实用户"
        WHEN MIN(DATE(in_time))>=date_sub(m.m_day,interval 6 day) THEN "新晋用户" 
        WHEN max(DATE(in_time))<=date_sub(m.m_day,interval 30 day) THEN "流失用户"
        ELSE "沉睡用户"
    END  c
FROM  tb_user_log
CROSS JOIN (
    SELECT MAX(DATE(out_time)) m_day FROM tb_user_log
) m
GROUP BY uid,m.m_day
) l
cross join (select count(distinct uid) num from tb_user_log) cnt  
group by c 
order by ratio desc

(1)找到最大日期,之后与原表做笛卡尔积(JOIN或者CORSS JOIN)

(2)按照uid进行分组,通过每组的最大值和最小值判断用户类型

(3)之后按照用户类型进行分组求和即可,除以总人数得到ratio

全部评论

相关推荐

01-17 10:48
门头沟学院 Java
xxxxOxo:这公司幽默得很,要了简历半天一点动静都没有,过一会就给你发个邮件让你做测试,做完又没后文了,纯溜人
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务