假设有以下表格
记录历次考试的成绩
score:分数
di:第几次
uid:学生ID号
SELECT * FROM info;
现在的问题是:用一条MySQL语句求当次和前3次的平均成绩。
如果一条语句不能完成,写成存储过程也行。
数值的来源:
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;