题解 | #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函数保留一位小数

全部评论

相关推荐

2024-11-08 17:36
诺瓦科技_HR
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务