TM小哥和FH小妹 在牛客大学若干年后成立了牛客SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80~90分都是B,60~70分为C,50~60为D,E为50分以下 因为每个名次最多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-笔试面试资料
这是qklbishe.com第7477 篇笔试面试资料
提供答案分析,通过本文《TM小哥和FH小妹 在牛客大学若干年后成立了牛客SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80~90分都是B,60~70分为C,50~60为D,E为50分以下 因为每个名次最多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-笔试面试资料》可以理解其中的代码原理,这是一篇很好的求职学习资料
本站提供程序员计算机面试经验学习,笔试经验,包括字节跳动/头条,腾讯,阿里,美团,滴滴出行,网易,百度,京东,小米,华为,微软等互联网大厂真题学习背诵。
答案:
TM小哥和FH小妹在区块链毕设学生大学若干年后成立了区块链毕设学生SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80~90分都是B,60~70分为C,50~60为D,E为50分以下
因为每个名次最多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
首先我们需要知道:当某一数的正序和逆序累计均大于整个序列的数字个数的一半即为中位数
比如:
A A B B C C D D
1 2 3 4 5 6 7 8
8 7 6 5 4 3 2 1
那么上面的4,5以及5,4就是中位数,如果是奇数的话,就只有1个
根据(一)https://blog.nowcoder.net/n/60f8ed8d360c4307a8875349caf22b77 我们知道求正序和的写法,
求逆序和其实就是 sum(a) over (order by b desc) 就行了,多加了一个desc,那么我们可以写出如下代码:
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 order by grade;
得到中间表的结果如下:
将 a>=total的一半并且 b>=total的一半列出,就得到了最后需要的结果:
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;
今天 15:30:34 回复(0)
首先这题和上一题时姊妹题,上一题求:本人知道自己等级后,本人可能的最后一名时多少?
这题提示了我们为何不把每个等级的名次范围求出来,SQL如下:
SELECT a.grade, (SELECT CASE WHEN SUM( number ) IS NULL THEN 1 ELSE SUM( number ) + 1 END FROM class_grade WHERE grade < a.grade ) AS grade_min, (SELECT SUM( number ) FROM class_grade WHERE grade <= a.grade ) AS grade_max FROM class_grade AS a ;
接着判断中位数是否在某个区间内即可
SELECT b.grade FROM ( SELECT a.grade, ( SELECT CASE WHEN SUM( number ) IS NULL THEN 1 ELSE SUM( number ) + 1 END FROM class_grade WHERE grade < a.grade ) AS grade_min, ( SELECT SUM( number ) FROM class_grade WHERE grade <= a.grade ) AS grade_max FROM class_grade AS a ) AS b WHERE ( b.grade_min <= ROUND(( SELECT SUM( number ) FROM class_grade )/ 2 ) AND ROUND(( SELECT SUM( number ) FROM class_grade )/ 2 )<= b.grade_max )&nbs***bsp;( b.grade_min <= ROUND(( SELECT SUM( number )+ 1 FROM class_grade )/ 2 ) AND ROUND(( SELECT SUM( number )+ 1 FROM class_grade )/ 2 )<= b.grade_max ) ORDER BY grade;
比较繁琐,时间也稍长,不是大佬,请观者谅解!
今天 17:22:43 回复(0)
select DISTINCT t.grade from (select a.grade,row_number() over (order by grade) as num
from class_grade a join
mysql.help_topic b
on b.help_topic_id < a.number
order by grade ) t,(
SELECT
sum(number) AS num
FROM
class_grade
from class_grade a join
mysql.help_topic b
on b.help_topic_id < a.number
order by grade ) t,(
SELECT
sum(number) AS num
FROM
class_grade
) e where t.num=CEIL((e.num+1)/2) or t.num= FLOOR((e.num+1)/2)
随便写的,反正不好,只做参考
今天 15:20:31 回复(0)
文章部分来自互联网,侵权联系删除
www.qklbishe.com
区块链毕设网(www.qklbishe.com)全网最靠谱的原创区块链毕设代做网站部分资料来自网络,侵权联系删除!资源收费仅为搬运整理打赏费用,用户自愿支付 !
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » TM小哥和FH小妹 在牛客大学若干年后成立了牛客SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80~90分都是B,60~70分为C,50~60为D,E为50分以下 因为每个名次最多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-笔试面试资料
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台 » TM小哥和FH小妹 在牛客大学若干年后成立了牛客SQL班,班的每个人的综合成绩用A,B,C,D,E表示,90分以上都是A,80~90分都是B,60~70分为C,50~60为D,E为50分以下 因为每个名次最多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-笔试面试资料