SELECT
    tag,
    count(*) tag_cnt
FROM
    exam_record r
JOIN examination_info i USING (exam_id)
WHERE
    uid IN (
        SELECT
            uid
        FROM
            exam_record
        WHERE
            submit_time IS NOT NULL
        AND score IS NOT NULL
        GROUP BY
            uid
        HAVING
            count(DISTINCT exam_id, start_time) / count(
                DISTINCT DATE_FORMAT(start_time, "%Y%m")
            ) >= 3
    )
GROUP BY
    tag
ORDER BY
    tag_cnt DESC