从单独的表中分组

时间:2014-05-16 18:34:27

标签: sql count group-by

我需要计算每年第一学期达到80%或以上的学生人数。我有两个表,一个是学生详细信息,名为tblStudents,另一个是成绩,名为tblStudentSubjectMarks。现在,每个学生都有多年来在TblStudents的AcYear专栏下,第一学期的分数存储在tblStudentSubjectMarks的E1栏中。我写这篇文章是为了展示所有年满80%或更高的学生,不过他们的年份,结果如下:

SELECT COUNT(*) AS [80%]
FROM tblStudentSubjectMarks
WHERE E1 >= 80;

输出为:1553

现在,我想根据AcYear(这是学生的当前年份)对数据进行分组,以便显示第一年中有多少人获得A,第二年有多少人,等等。问题是,当我尝试这个时,

SELECT COUNT(*) AS [80%]
FROM tblStudentSubjectMarks, tblStudents
WHERE E1 >= 80
GROUP BY AcYear;

输出是三行值,如442605.显然此输出不正确。 我做错了什么?

1 个答案:

答案 0 :(得分:1)

您隐含地进行交叉加入,这意味着所有学生的所有分数都与每个学生相关联。您需要通过指定一个表中的记录与另一个表中的记录相关的方式来限制结果。例如,如果StudentID是唯一标识学生的列,则可以将WHERE条件添加到现有条件中,以便WHERE子句类似于:

WHERE E1 >= 80 AND tblStudentSubjectMarks.StudentID = tblStudents.StudentID