sql
# 请统计SQL试卷上未完成率较高的50%用户(对所有用户的完成率进行排序,找出完成率排名小于等于 50% 的用户)中,
# 6级和7级用户在有试卷作答记录的近三个月中,每个月的答卷数目和完成数目。
# 按用户ID、月份升序排序。
with
temp1 as (
select
user_info.uid,
count(if(submit_time is null, 1, null)) / count(*) as incomplete_rate
from
exam_record
join user_info using (uid)
where
exam_id in (
select
exam_id
from
examination_info
where
tag = 'SQL'
)
group by
uid
order by
uid desc
),
temp2 as (
select
uid,
incomplete_rate,
percent_rank() over (
order by
incomplete_rate desc
) as pr
from
temp1
order by
pr
),
temp3 as (
select
uid,
date_format(start_time, "%Y%m") as start_month,
count(start_time) as total_cnt,
count(submit_time) as complete_cnt
from
exam_record
join user_info using (uid)
where
uid in (
select
uid
from
temp2
where
pr <= 0.5
)
and uid in (
select
uid
from
user_info
where
level in (6, 7)
)
group by
uid,
date_format(start_time, "%Y%m")
)
select
uid,
start_month,
total_cnt,
complete_cnt
from
(
select
uid,
start_month,
total_cnt,
complete_cnt,
rank() over (
partition by
uid
order by
start_month desc
) as rk
from
temp3
) as t1
where
rk <= 3
order by
uid,
start_month