题解 | #SQL类别高难度试卷得分的截断平均值#

SQL类别高难度试卷得分的截断平均值

http://www.nowcoder.com/practice/a690f76a718242fd80757115d305be45

牛客网的mysql配置(我不知道是不是其他的也这样),聚合函数sum,avg,max,min这些都是不能用在where筛选的。

在这题中,我想用max(rk)-1 找到排名倒二的分数,但是where不能用,having虽然语法上不报错,但是group聚合以后,比如group by difficilty having a.rk<max(a.rk), 这里首先之前已经用where 筛选出hard,其次这里的having是用来筛选difficulty的,不是筛选a.rk的,再次,group by后面要有所有select的内容,不然就会语法报错的。总结一下就是语法和理解整个都错了。

不要用where。。。and where。。。

自己做的最接近的答案:假设知道剔除null值的score一共有五个,则下面代码能通过
select tag
, difficulty
, round(avg(score),1) as clip_avg_score
from(
select tag
, difficulty
, score
, rank()over(partition by er.exam_id order by score) as rk
from examination_info ei
inner join exam_record er
on ei.exam_id = er.exam_id
where difficulty = 'hard'
and tag = 'SQL'
and score is not null
    ) as a
    where a.rk >=2
    and a.rk<=4
    group by tag, difficulty



知识点:rank函数,这里score有空值,则排序的时候默认为最小

全部评论

相关推荐

2024-12-27 10:21
已编辑
海南师范大学 媒介策划
到我怀里来:身高体重住址这些就别写了,留几个关键的就行,工作经历突出重点写详细点
点赞 评论 收藏
分享
02-02 20:25
门头沟学院 Java
数学转码崽:八股文也算是前人总结的精华,但是因为全是结果导向,你光背不去理解它背后的深层原理和这样做的原因,反而忽略了程序员最该重视的过程导向。推荐你不会的就去多问ai,比如我当时背的时候,concurrenthashmap底层原理常见八股网站都会讲,但是我不理解为什么它去用synchronize锁节点,为什么不用reentrantlock去锁节点。面试官问我你为什么觉得synchronize在这个场景下性能更好呢?虽然面试官可能也不确定清楚,但是你可以尝试给他解答,让他看见你的思考,这才是最重要的,毕竟你没实习,你的项目你也无法证明是你自己思考的产物,那就在别的地方体现你的能力
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务