题解 | #未完成率较高的50%用户近三个月答卷情况#
未完成率较高的50%用户近三个月答卷情况
https://www.nowcoder.com/practice/3e598a2dcd854db8b1a3c48e5904fe1c
# 基础表
with table1 as(
select uid , level, tag,
date_format(start_time,"%Y%m") as start_month,
date_format(submit_time,"%Y%m") as submit_month
from exam_record left join examination_info using(exam_id)
left join user_info using(uid)
),
# 统计SQL试卷上未完成率
# 6级和7级用户在有试卷作答记录
table2 as(
select uid,
((count(start_month) - count(submit_month)) / count(start_month)) as incomplete_rate
from table1
where tag = 'SQL'
group by uid
),
# (目标用户id)统计SQL试卷上未完成率较高的50%用户中
table3 as(
SELECT uid, incomplete_rate ,
percent_rank()over(order by incomplete_rate) as rate_rank#不用分组partition by 因为上一轮已经分组
FROM table2
),
# select uid,start_month
# from table1
# # 输出6级和7级 近三个有作答记录的月 的 作答数、完成数
table4 as(
select uid, start_month ,
count(start_month) as total_cnt ,
count(submit_month) as complete_cnt,
dense_rank()over(partition by uid order by start_month desc) as rank_month
from table1
where (level = 6 or level = 7) and uid in (select uid from table3 where rate_rank >= 0.5)
group by uid, start_month
)
select uid,start_month,total_cnt,complete_cnt
from table4
where rank_month <= 3
order by uid , start_month