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