SELECT uid, start_month
        ,COUNT(start_month) AS total_cnt
        ,COUNT(submit_time) AS complete_cnt
FROM (
    SELECT uid, exam_id, level, submit_time
            , DATE_FORMAT(start_time, "%Y%m") AS start_month
            , DENSE_RANK() OVER(PARTITION BY uid ORDER BY DATE_FORMAT(start_time, "%Y%m") DESC) AS mon_level
    FROM user_info
    JOIN exam_record USING(uid)
    JOIN examination_info USING(exam_id)
    WHERE uid in (
        SELECT uid
        FROM (
            SELECT uid, PERCENT_RANK() OVER(ORDER BY COUNT(submit_time) / COUNT(start_time)) AS rate
            FROM user_info
            JOIN exam_record USING(uid)
            JOIN examination_info USING(exam_id)
            WHERE tag = "SQL" 
            GROUP BY uid
        ) data1
        WHERE rate <= 0.5 
    )  AND level IN (6, 7)
) data

WHERE mon_level <= 3
GROUP BY uid,start_month
ORDER BY  uid, start_month