with tb_user_grade as (
select
uid,
case
when min(date(in_time)) between date_sub('2021-11-04',interval 6 day) and '2021-11-04' then '新晋用户'
when max(date(in_time)) between date_sub('2021-11-04',interval 29 day) and date_sub('2021-11-04',interval 7 day) then '沉睡用户'
when (max(date(in_time)) between date_sub('2021-11-04',interval 6 day) and '2021-11-04') and min(date(in_time)) < date_sub('2021-11-04',interval 6 day) then '忠实用户'
else '流失用户'
end as user_grade
from
tb_user_log
group by
uid
)
select
user_grade,
round(count(*) / (select count(*) from tb_user_grade),2) as ratio
from
tb_user_grade
group by
user_grade
order by
ratio desc