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

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

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


明确题意:

从exam_record数据表中计算所有用户完成SQL类别高难度试卷得分的截断平均值(去掉一个最大值和一个最小值后的平均值)。

问题拆解:

  • 筛选完成了hard试卷的记录,得到表t1。知识点:where
  • 求各个exam_id的平均值(去掉一个最大值和一个最小值后的平均值)知识点:where、group by 、sum、count、round等
    1. 按score过滤,得到有分数的记录。
    2. 按exam_id分组group by exam_id;
    3. 分别对相同exam_id的多条记录求和sum,然后减去max和min,得到去掉一个最大值和一个最小值后的总分。count(*)得到的结果也需要减去2,然后得到截断后的平均值clip_avg_score,得到表t2
  • t1和t2做inner join计算,用exam_id关联。round(num,m)是把num做四舍五入保留m位小数。
    1. 查询出需要的三个字段,即得到结果。


代码实现:

select 
t1.tag,
t1.difficulty,
t2.clip_avg_score
from 
(
SELECT * from examination_info where difficulty = 'hard' and tag='SQL'
)t1 
join (
select 
    exam_id,
    round((sum(score) - max(score) - min(score))/(count(*)-2),1) as clip_avg_score
    from exam_record 
    where score is not null 
    group by exam_id 
)t2 
on t1.exam_id = t2.exam_id ;

不足之处欢迎指正。

全部评论
t1要加一个tag为SQL的限定条件吧
点赞 回复 分享
发布于 2021-10-31 14:49
好家伙,这么长
点赞 回复 分享
发布于 2021-11-01 11:17

相关推荐

10-31 14:54
已编辑
门头沟学院 算法工程师
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务