题解 | #最差是第几名(二)#
最差是第几名(二)
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;

三奇智元机器人科技有限公司公司福利 70人发布