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;