WITH
    user_info_tmp AS (
        SELECT
            ui.uid,
            ui.level level,
            SUM(
                IF (
                    er.submit_time is null
                    and start_time is not null,
                    1,
                    0
                )
            ) incomplete_cnt,
            ROUND(
                IFNULL (
                    SUM(
                        IF (
                            er.submit_time is null
                            and start_time is not null,
                            1,
                            0
                        )
                    ) / count(er.start_time),
                    0
                ),
                3
            ) incomplete_rate,
            count(er.start_time) has_strat
        FROM
            user_info ui
            LEFT JOIN exam_record er on er.uid = ui.uid
        GROUP BY
            ui.uid
    )
SELECT
    user_info_tmp.uid,
    user_info_tmp.incomplete_cnt,
    user_info_tmp.incomplete_rate
FROM
    user_info_tmp
WHERE
    EXISTS (
        SELECT
            1
        FROM
            user_info_tmp
        WHERE
            level = 0
            AND incomplete_cnt > 2
    )
    AND level = 0
UNION ALL
SELECT
    user_info_tmp.uid,
    user_info_tmp.incomplete_cnt,
    user_info_tmp.incomplete_rate
FROM
    user_info_tmp
WHERE
    NOT EXISTS (
        SELECT
            1
        FROM
            user_info_tmp
        WHERE
            level = 0
            AND incomplete_cnt > 2
    )
    and (has_strat <> 0)
ORDER BY
    incomplete_rate