题解 | #考试分数(二)#

考试分数(二)

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

这道题目要求我们从成绩表中查询出每个用户的分数大于其所在岗位平均分的记录,我们要做的事情如下:

1. 确定总体问题

目标是查询出每个用户的分数大于其所在岗位平均分的记录,并按用户ID升序排序。我们需要从成绩表中提取数据,计算每个岗位的平均分数,然后筛选出分数高于平均分的记录。

2. 分析关键问题

  • 计算岗位平均分:使用AVG函数计算每个岗位的平均分数。
  • 筛选高于平均分的记录:通过JOINWHERE子句筛选出分数高于平均分的记录。
  • 排序输出:按用户ID升序排列输出结果。

3. 解决每个关键问题的代码及讲解

步骤1:计算岗位平均分

我们使用AVG函数计算每个岗位的平均分数:

select
    job,
    avg(score) as score
...
group by
    job
  • AVG(score) AS score: 计算每个岗位的平均分数。
  • GROUP BY job: 按岗位分组计算平均分数。
步骤2:筛选高于平均分的记录

我们通过JOINWHERE子句筛选出分数高于平均分的记录:

select
    g.id,
    g.job,
    g.score
from
    grade g
    join (
        ...
    ) s on s.job = g.job
where
    g.score > s.score
  • JOIN: 将岗位平均分与成绩表连接。
  • WHERE g.score > s.score: 筛选出分数高于平均分的记录。
步骤3:排序输出

我们按用户ID升序排列输出结果:

order by
    g.id asc
  • ORDER BY g.id ASC: 按用户ID升序排列。

完整代码

select
    g.id,
    g.job,
    g.score
from
    grade g
    join (
        select
            job,
            avg(score) as score
        from
            grade
        group by
            job
    ) s on s.job = g.job
where
    g.score > s.score
order by
    g.id asc;
全部评论

相关推荐

04-29 18:07
常州大学 Java
寂静羽翼:兄弟我已经亲身经历了,双非没实习很多大厂还是会给笔试的,可是有的公司笔试做的好也不给面一直卡着,ssob基本看我没实习都拒绝我了,但是每天投满偶尔也能有一两场初创公司的面试,但是薪资基本在五六千
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
点赞 评论 收藏
分享
现在才开始投还有可能吗😭😭😭
牛客621925249号:开秋招了已经
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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