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