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

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

SELECT * FROM info;

img

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

img

数值的来源:

img


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;