with t1 as (select level, case when score<60 then '差' when score<75 then '中' when score<90 then '良' else '优' end as grade from exam_record join user_info on exam_record.uid=user_info.uid where score is not null) select t1.level,t1.grade,round(count(grade)/ct,3) cnt from t1 join (select level,count(level) ct from t1 group by level) t2 on t1.level=t2.level group by t1.level,t1.grade order by t1.level desc,cnt desc;