SQL-中位数所在行计算-牛客网真题-最差是第几名(二)

本文介绍了如何在SQL中计算中位数,并提供了牛客网真题的具体解题过程,涉及成绩排名与中位数确定的方法。通过计算正序和逆序累计值来找到中位数所在位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


前言

本文主要记录SQL-中位数所在行计算-牛客网真题-最差是第几名(二)计算的相关笔记,原题链接点击此处


1. SQL中位数计算

在SQL中中位数的位置计算遵循两个规则,可以快速的找到中位数所在行的位置:

  • 截至当前行的正序累计值大于或者等于总数的1/2
  • 截至当前行的逆序累计值大于或者等于总数的1/2

2. 牛客网真题

2.1 真题描述

TM小哥和FH小妹在牛客大学若干年后成立了牛客SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80-90分都是B,70-80分为C,60-70为D,E为60分以下
假设每个名次最多1个人,比如有2个A,那么必定有1个A是第1名,有1个A是第2名(综合成绩同分也会按照某一门的成绩分先后)。
每次SQL考试完之后,老师会将班级成绩表展示给同学看。
现在有班级成绩表(class_grade)如下:

第1行表示成绩为A的学生有2个

最后1行表示成绩为D的学生有2个

老师想知道学生们综合成绩的中位数是什么档位,请你写SQL帮忙查询一下,如果只有1个中位数,输出1个,如果有2个中位数,按grade升序输出,以上例子查询结果如下::

解析:
总体学生成绩排序如下:A, A, B, B, B, B, C, C, C, C, D, D,总共12个数,取中间的2个,取6,7为:B,C

2.2 解题思路

1、首先应该计算出总的人数
2、计算出每个成绩等级下按正序或者逆序的累计和
3、根据第2步计算出的累计和与总人数的1/2对比来确定最终想要的位置。

2.3 查询代码

select grade from(
select grade,(select sum(number) from class_grade) total1,
    sum(number)over(order by grade) s1,
    sum(number)over(order by grade desc) s2
    from class_grade
)C
where s1>=total1/2 and s2>=total1/2
order by grade
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sky-JT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值