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

最差是第几名(二)

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

with tmp as (select grade, (select sum(number) from class_grade c2 where c1.grade > c2.grade ) as le, (select sum(number) from class_grade c2 where c1.grade >= c2.grade ) as r from class_grade c1
order by grade asc
)

select grade from tmp
where le/(select sum(number) from class_grade) = 0.5 or r/(select sum(number) from class_grade) = 0.5 or 
((le/(select sum(number) from class_grade) < 0.5) and r/(select sum(number) from class_grade) > 0.5)

选出不包含本等级的数量为le 左边界;包含本等级的数量为r 右边界;然后有3种条件可以判定出它是中位数,1、左边界/总数在0.5上;2、右边界/总数在0.5上;3、左边界小于0.5且右边界大于0.5

更推荐下面的写法,看评论区才学到的,更省事,让窗口包含了0.5就行:

with tmp as (select grade, (select sum(number) from class_grade c2 where c1.grade > c2.grade ) as le, (select sum(number) from class_grade c2 where c1.grade >= c2.grade ) as r from class_grade c1
order by grade asc
)

select grade from tmp
where 
((le/(select sum(number) from class_grade) <= 0.5) and r/(select sum(number) from class_grade) >= 0.5)

全部评论

相关推荐

09-17 19:25
已编辑
太原理工大学 游戏测试
叁六玖:公司名发我,我要这个HR带我打瓦
我的秋招日记
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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