SELECT
    uid,
    COUNT(DISTINCT r.id) as exam_cnt,
    COUNT(DISTINCT p.id) as question_cnt
FROM
    exam_record r
LEFT JOIN
    practice_record p USING(uid)
LEFT JOIN
    examination_info USING(exam_id)
LEFT JOIN
    user_info USING(uid)    
WHERE
    uid in (
        SELECT
            uid
        FROM
            exam_record r 
        LEFT JOIN
            practice_record p USING(uid)
        LEFT JOIN
            examination_info USING(exam_id)  
        LEFT JOIN
            user_info USING(uid)     
        WHERE
            tag = 'SQL' and difficulty = 'hard' and level = 7
        GROUP BY
            uid
        HAVING
            avg(r.score) > 80
) and left(r.submit_time,4) = '2021' and (left(p.submit_time,4) = '2021' or p.submit_time is null)
GROUP BY
    uid
ORDER BY
    exam_cnt, question_cnt DESC