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

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

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

WITH Rank_view AS(
SELECT tag, difficulty, score,
ROW_NUMBER() OVER(PARTITION BY a.exam_id ORDER BY score ASC) MIN_SCORE,
ROW_NUMBER() OVER(PARTITION BY a.exam_id ORDER BY score DESC) MAX_SCORE
FROM examination_info a
LEFT JOIN 
exam_record b
ON a.exam_id = b.exam_id
WHERE tag = 'SQL' AND difficulty = 'hard' AND score IS NOT NULL
)

SELECT tag, difficulty, ROUND(AVG(score), 1)
FROM Rank_view
WHERE MIN_SCORE > 1 AND MAX_SCORE > 1
GROUP BY tag, difficulty

题解:

1.任务:计算均值

2.限制:sql,hard,去掉一个最大值和最小值

思路:

可以先写个普通的计算均值的代码,然后发现需要找到,或者标识出不是最大值和最小值的得分

最先是想直接在查询中用条件语句中使用极值函数,但是报错,因为是聚合函数,需要使用groupby

因此采用临时表的方式,使用开窗函数进行排序

1.创建临时表,把限制条件进行书写,得到较大范围的限制结果,这里要注意必须在这里过滤掉没有得分的记录

2.根据顺序和倒序排序过滤掉两个极值,avg也是聚合函数,因此最后要使用groupby,同时使用round函数保留一位小数

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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