在我的考试中,我们得到了以下关系:
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;
这是一个足够的解决方案吗?
答案 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;