题解 | #最差是第几名(二)#
最差是第几名(二)
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,2,3,4,5 的中位数是(1+5)/2 = 3,也就是说3就是中位数 - 数据个数为偶数:
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取整,得到正序和逆序位置的元素就是我们要找的中位数,这个方法同样适合奇数个数的数据