首页 新闻 会员 周边

mysql查询每个学生最近10次成绩平均值

0
[待解决问题]

mysql查询每个学生最近10次成绩平均值,应如何查询?求大神解惑

上清天枢子的主页 上清天枢子 | 初学一级 | 园豆:115
提问于:2020-10-20 10:21
< >
分享
所有回答(2)
1

你看看这个有帮助吗:MySQL:如何查询出每个分组中的 top n 条记录?。最好能提供一个建表语句和测试insert语句,方便这里的大神们测试

会长 | 园豆:12401 (专家六级) | 2020-10-20 10:55

完美!谢谢大佬!

支持(0) 反对(0) 上清天枢子 | 园豆:115 (初学一级) | 2020-10-20 18:38
0

将查询结果集装入临时表

需求:有两张表,学生表(student)、成绩表(score),需要查询出每一个学生的平均成绩。

  • 新建表student,并添加测试数据
CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(45) COLLATE utf8mb4_bin DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('job');
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('addy');
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('barton');
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('bab');
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('stive');
INSERT INTO `MachineDb`.`student` (`name`) VALUES ('mout');

  • 新建score表,并添加测试数据

CREATE TABLE `score` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `studentId` int(11) DEFAULT NULL,
  `mark` double DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '1');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '2');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '3');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '4');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '5');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '6');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '7');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '8');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('1', '9');
INSERT INTO `MachineDb`.`score` (`studentId`, `mark`) VALUES ('2', '66');

  • 查询出所有学生的平均成绩并装入临时表中

查询平均成绩

select studentId ,CAST(AVG(mark) AS DECIMAL(10,2)) AS avgMark  from score group by studentId 

平均成绩放进临时表


create temporary table t(
select studentId ,CAST(AVG(mark) AS DECIMAL(10,2)) AS avgMark  from score group by studentId 
);

查询学生的平均成绩

select  id , name ,t.avgMark from student  s 
left join  t on s.id=t.studentId

结果大概如下所示

id name avgMark
1 job 5.00
Naylor | 园豆:137 (初学一级) | 2020-10-26 12:04

欢迎讨论

支持(0) 反对(0) Naylor | 园豆:137 (初学一级) | 2020-10-26 12:05
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册