【发布时间】:2020-05-01 00:15:42
【问题描述】:
我无法弄清楚如何找到所有参加任何课程的学生的平均数,而不是找到每个班级的平均数。
这相当于找到每个确实有学生注册的班级,计算总和,计算平均值,然后转到下一个注册学生的班级。然后假设有三个班级有学生就读,让我们输出三个班级的平均年龄。应该返回三个结果,而不是一个。
我最初的想法是一个尝试性的解决方案
SELECT AVG(AGE) FROM STUDENTS;
下面列出了我使用的架构,主键以粗体突出显示。
学生(sid:整数,姓名:字符串,专业:字符串,年龄:整数)
注册(sid:整数,cid:整数)
课程(cid:整数,名称:字符串,讲师:字符串,房间:字符串,时间:时间)
非常感谢任何帮助。
找出该班级所有学生的平均年龄。
样本数据 - 学生
INSERT INTO `Students` (`sid`, `name`, `major`, `age`) VALUES ('1', 'Raymond', 'CS', '20');
INSERT INTO `Students` (`sid`, `name`, `major`, `age`) VALUES ('2', 'Jack', 'CS', '22');
INSERT INTO `Students` (`sid`, `name`, `major`, `age`) VALUES ('3', 'Henry', 'CS', '21');
样本数据 - 注册
INSERT INTO `Enrollment` (`sid`, `cid`) VALUES ('1', '1');
INSERT INTO `Enrollment` (`sid`, `cid`) VALUES ('1', '2');
INSERT INTO `Enrollment` (`sid`, `cid`) VALUES ('2', '2');
示例数据 - 类
INSERT INTO `Classes` (`cid`, `name`, `instructor`, `room`, `time`) VALUES ('1', 'Math', 'Jack Brown', '300', '11:20:09');
INSERT INTO `Classes` (`cid`, `name`, `instructor`, `room`, `time`) VALUES ('2', 'Math', 'Henrita Espen', '500', '12:20:09');
数据库名称 - DB
预期输出 - 可以变化
如果只有同一个学生,按id分组会导致平均年龄相同。
20
【问题讨论】:
-
请提供样本数据、所需结果和适当的数据库标签。
-
@GordonLinoff 谢谢,正在努力。
-
参加 Henrita Espen 数学课的学生的平均年龄应该是 21 岁,不是吗?招收了两个学生:雷蒙德和杰克。因此,Raymond 的年龄 (20) 加上 Jack 的年龄 (22) 得出 42 和 42 除以 2(即班级学生人数)为 21。因此您的预期输出应该是:
20 , 21 -
@Abra Student 1 20 岁就读 1 班,他也是唯一一个 20 岁就读 2 班的人。所以有两个 20 的结果。但是如果你按 id 分组是的,那么你是对的,一个结果就是平均值。
标签: sql