esanweb 2023-02-17 14:45 采纳率: 0%
浏览 20

关于#mysql#的问题:假设有以下表格记录学生的历次考试的成绩score:分数di:第几次uid:学生ID号每个学性记录的di第几次成绩是不重复的

假设有以下表格
记录历次考试的成绩
score:分数
di:第几次
uid:学生ID号

SELECT * FROM info;

img

现在的问题是:用一条MySQL语句求当次和前3次的平均成绩。
如果一条语句不能完成,写成存储过程也行。

img

数值的来源:

img

  • 写回答

1条回答 默认 最新

  • 文盲老顾 新星创作者: 信息安全技术领域 2023-02-17 15:49
    关注
    
    select b.*,c.score_avg -- 平均成绩在最后的 left join
    from (
      select uid,max(di) di 
      from tb3 
      group by uid  -- 获取每个学生的最近一次考试次数
    ) a 
    left join tb3 b on a.uid=b.uid and a.di=b.di -- 按最后一次考试次数获取最新成绩
    left join (
      select uid,avg(score) score_avg -- 获得平均成绩
      from (
        select *
          ,row_number() over(partition by uid order by di) ts -- 使用 row_number 对考试次数排序,避免出现漏考的问题,比如某人只参加了 1\4\7次的考试
        from tb3
      ) a 
      where ts<=3 -- 对排序后的考试次数取最早三次
      group by uid -- 按 uid分组
    ) c on c.uid=a.uid;
    
    评论

报告相同问题?

问题事件

  • 创建了问题 2月17日