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

最差是第几名(二)

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

看到大部分的题解都是参照正序和逆序的办法,但是此方法有一定的限制,并不通用。 解题步骤: 本题需要求出几个关键字段,就能很轻松解题了。 1、总共排名数; 2.累计排名数; 3.求取每个排名范围; 4.求取在奇数情况下的中位数; 5、求取在偶数情况下的中位数; 6.让求偶中位数的值落在3的排名范围即可。

select t1.grade
from
( select t0.grade,t0.total0,t0.total1, ifnull(lag(t0.total1)over(),0) total2, (case when t0.total0%2 = 1 then floor((t0.total0+1)/2) else floor((t0.total0+1)/2) end) start0, (case when t0.total0%2 = 1 then floor((t0.total0+1)/2) else floor((t0.total0+2)/2) end) start1 from
(select grade,(select sum(number) from class_grade) total0, sum(number)over(order by grade) total1 from class_grade ) t0 ) t1 where (t1.start0 > t1.total2 and t1.start0 <= t1.total1) or (t1.start1 > t1.total2 and t1.start1 <= t1.total1) order by t1.grade;

全部评论

相关推荐

点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务