select level,score_grade,round(count(1)/level_cn,3) as ratio from ( select level,score_grade,count(1)over(partition by level) as level_cn from ( select level, case when score >= 90 then '优' when score >= 75 and score < 90 then '良' when score >= 60 and score < 75 then '中' else '差' end as score_grade from user_info t1 join exam_record t2 on t1.uid = t2.uid where score is not null ) t ) t3 group by level,score_grade,level_cn order by level desc,ratio desc