我的SQL查询解决方案是否正确?

时间:2015-12-09 10:59:08

标签: mysql sql relational-database relation

在我的考试中,我们得到了以下关系:

COURSES(**Number**, School, CourseName)

STUDENTS(**SNumber**, Surname, FirstName, School)

EXAMS(**Student**, **Course**, Grade, Date)

其中键以粗体显示。 EXAMS关系存储通过考试的学生的信息.EXAMS.Student引用STUDENTS.SNumber和EXAMS.Course参考COURSES.Number。

我们要求编写一个SQL查询来检索每个学号的所有以下信息:

-their surname

- 他们通过了许多不同的考试

- 他们获得了多少不同的成绩

- 他们在考试中获得的最低,平均和最高成绩。"

首先,我在答案中提到我注意到,因为EXAMS只存储有关通过考试的学生的信息,所以无法知道学生考试是否通过,因此我们只计算了多少不同< em>传递他们获得的成绩。这是我写的查询:

SELECT S.SNumber, S.Surame,
       COUNT(E.Student) AS NumberOfExamsPassed,
       COUNT(DISTINCT E.Grade) AS NumberOfDifferentPassGrades,
       MIN(E.Grade) AS MinimumGrade,
       MAX(E.Grade) AS MaximumGrade,
       AVG(E.Grade) AS AverageGrade
FROM Students S, EXAMS E
GROUP BY E.Student;

这是一个足够的解决方案吗?

1 个答案:

答案 0 :(得分:1)

您应该使用显式连接。

SELECT S.SNumber, S.Surame,
       COUNT(E.Student) AS NumberOfExamsPassed,
       COUNT(DISTINCT E.Grade) AS NumberOfDifferentPassGrades,
       MIN(E.Grade) AS MinimumGrade,
       MAX(E.Grade) AS MaximumGrade,
       AVG(E.Grade) AS AverageGrade
FROM Students S
INNER JOIN EXAMS E ON S.SNumber = E.Student
GROUP BY E.Student;