SELECT
uid,start_month,total_cnt,complete_cnt
FROM(
SELECT
uid,
DATE_FORMAT(start_time, "%Y%m") start_month,
COUNT(start_time) total_cnt,
COUNT(submit_time) complete_cnt,
ROW_NUMBER() OVER(PARTITION BY uid ORDER BY DATE_FORMAT(start_time, "%Y%m") DESC) rk
FROM
user_info ui
INNER JOIN
exam_record er USING(uid)
WHERE
level IN (6,7) AND
uid IN (
SELECT
uid
FROM (
SELECT
uid,
PERCENT_RANK() OVER(ORDER BY COUNT(submit_time)/COUNT(*)) prk
FROM
exam_record er
INNER JOIN
examination_info ei USING(exam_id)
WHERE
tag = 'SQL'
GROUP BY
uid
)t1
WHERE
prk <= 0.5
)
GROUP BY
uid,start_month
)t2
WHERE
rk <= 3
ORDER BY
uid,start_month