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