题解 | #最差是第几名(二)#
最差是第几名(二)
https://www.nowcoder.com/practice/165d88474d434597bcd2af8bf72b24f1
#中位数:(总数+1)/2 左右边界 #加列等级 左右数边界 #判断中位数左、右边界在等级左右边界内 则标1 select grade from ( select grade ,case when lef_r>=l and lef_r<=r then 1#中位数左边界在 等级排名区间 when rig_r>=l and rig_r<=r then 1#中位数右边界在 等级排名区间 else 0 end t_f#含中位数的等级标1 from ( select a.grade ,sum_r+1-number l#等级排名左数字 ,sum_r r#等级排名右数字 ,floor((n_sum+1)/2) lef_r#中位数左边界 ,floor(if(floor((n_sum+1)/2)=(n_sum+1)/2,(n_sum+1)/2,ceiling((n_sum+1)/2))) rig_r#中位数右边界 from ( select * ,( select sum(number) from class_grade ) n_sum#总人数 ,sum(number)over(order by grade) sum_r from class_grade ) a order by 1 ) b#加列t_f筛选最终数据 ) c where t_f=1#筛选