Mysql 如何使用SQL正确回答这个问题

Mysql 如何使用SQL正确回答这个问题,mysql,sql,Mysql,Sql,第二份报告提供了一份完整的学生名单,列出了每个学生所学的科目、该科目的成绩以及所学单元的平均分数 所需的列如下: student ID, forename, surname, subject ID, result 在每个学生显示后,报告还应显示每个学生为其课程获得的平均分数 报告末尾应显示总体平均分数 我对SQL非常陌生,因此非常感谢您对这个问题的语法方面的任何帮助 目前,我已使用以下工具显示所有列以及所有学生详细信息: select student.student_ID , stu

第二份报告提供了一份完整的学生名单,列出了每个学生所学的科目、该科目的成绩以及所学单元的平均分数

所需的列如下:

student ID,
forename,
surname,
subject ID,
result
在每个学生显示后,报告还应显示每个学生为其课程获得的平均分数

报告末尾应显示总体平均分数

我对SQL非常陌生,因此非常感谢您对这个问题的语法方面的任何帮助

目前,我已使用以下工具显示所有列以及所有学生详细信息:

select student.student_ID
     , student.forename
     , student.surname
     , result.subject_ID
     , result.result 
  from student
     , result;

但不管出于什么原因,它都给了我相同的结果

正如我所说,我对sql不是很在行,所以即使只是一个伪syntaz也会很好地解释我必须做什么才能完成这项工作

这对于我想象中有基本sql知识的人来说应该很简单

提前谢谢

康纳

更新:

但是,在添加group by时。我似乎只得到一门课的成绩?我需要用别的东西分组吗?

谢谢各位,我已经在discord服务器上寻找帮助好几个小时了,这是迪福给我的更多帮助。干杯

更新2:

对不起,我在这方面做得太差了。。。
我很傻,每个学生的第四行是平均值。这是正确的…但它应该这样显示吗?

您没有在查询中指定学生行和结果行之间的任何关系。因此,它只返回表中每一行的组合,这称为叉积或叉联接

您需要指示行应该如何配对,以便每个学生只显示他们自己的结果,而不是其他学生的结果。您可以在条件为的情况下使用联接来执行此操作

SELECT student.student_ID, student.forename, student.surname, result.subject_ID, result.result 
FROM student
JOIN result ON student.student_ID = result.student_ID
要获得每个学生的平均值,需要使用GROUP BY student.student_ID以及聚合函数AVG

要获得总体平均值,请忽略分组。在这种情况下,您甚至不需要加入学生表

通过使用WITHROLLUP选项,可以在单个查询中获得所有结果


每个学生的平均值将为subject\u ID=NULL,总体平均值将为student\u ID=NULL。

在查询中,您不指定链接两个表的值

结果表是否有包含学生ID的键列

然后,查询至少应该声明它们应该相等

按原样使用查询并添加where子句

选择 学生号,学生号, 学生姓名, 学生姓, result.subject_ID, 结果 来自学生、结果 其中student.student\u ID=result.student\u ID
在这一点上,与任何基础的、介绍性的书籍或教程在一起20分钟都是有益的,但它给了我所有的结果。你期待什么???你只需要做一个没有任何过滤的直接连接。另外,要学会使用正确的连接。它已经存在超过25年了。真的吗???student.student\u ID=result.subject\u ID?你把约翰和数学联系起来了?在我的手机浏览器上,我没有看到问题中的结果表。不,谢谢你的回复!取得了一些进展,我会更新我的位置,这样你们可以看一看!谢谢你。我现在似乎取得了进步。我有一个每个学生、科目和成绩的完整列表,但是当我添加组时,结果只有一行。同样在这个问题上,我认为它要求的是同一表格中每个人的结果和平均结果非常感谢使用汇总功能在一个查询中获得所有小计的帮助。
SELECT student.student_ID, student.forename, student.surname, AVG(result.result) AS avg_result
FROM student
JOIN result ON student.student_ID = result.student_ID
GROUP BY student.student_ID
SELECT AVG(result) AS avg_result
FROM result
SELECT student.student_ID, student.forename, student.surname, AVG(result.result) AS avg_result
FROM student
JOIN result ON student.student_ID = result.student_ID
GROUP BY student.student_ID, result.subject_ID WITH ROLLUP