-- 先找到最大最小值,not exists方案 SELECT AVG(t.salary) FROM salaries t WHERE NOT EXISTS( SELECT 1 FROM (SELECT max(salary) mx,min(salary) mn FROM salaries s WHERE s.to_date = '9999-01-01') temp WHERE t.salary = temp.mx OR t.salary = temp.mn ) AND t.to_date = '9999-01-01' ; -- 先找到最大最小值,find_in_set方案,该方案可能会出错 SELECT AVG(t.salary) FROM salaries t,(SELECT CONCAT(max(salary),',',min(salary)) str FROM salaries s WHERE s.to_date = '9999-01-01') temp WHERE FIND_IN_SET(t.salary,str)=0 AND to_date = '9999-01-01'