题解 | #最差是第几名(二)#

最差是第几名(二)

http://www.nowcoder.com/practice/165d88474d434597bcd2af8bf72b24f1

  • 参考答案
select grade from 
(
    select grade, (select sum(number) from class_grade) as total,
        sum(number) over(order by grade) a,
        sum(number) over(order by grade desc) b
        from class_grade
) t1
where a >= total/2 and b >=total/2
order by grade;
  • 本题解析
    这是一道有意思的数学题,求中位数
    比如:
  1. 数据个数为奇数:
    1,2,3,4,5 的中位数是(1+5)/2 = 3,也就是说3就是中位数
  2. 数据个数为偶数:
    1,2,3,4,5,6的中位数是a=(1+6)/2=3向前取整,b=(1+6)/2=4向后取整,3,4是中位数
    奇数的中位数好求,偶数的就比较麻烦一点,
    但是通过观察发现,
    正序时:a=(1+6)/2=3(取整)
    1,2,3,4,5,6
    倒序时: a=(1+6)/2=4(取整)
    6,5,4,3,2,1
    所以我们只需要用数据个数对2取整,得到正序和逆序位置的元素就是我们要找的中位数,这个方法同样适合奇数个数的数据
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务