SQL计数和分组依据 - 计数和组,一起使用,允许这个吗?

时间:2013-04-26 00:24:10

标签: sql count group-by

我正在使用标准SQL进行练习查询。 在这个例子中,我需要的是获得已经注册任何课程超过2次的每个学生的姓名和ID。在这种情况下,表格包含以下信息(我将仅列出与此练习相关的列):

学生有身份证和学生姓名。 课程有课程ID。 类具有组ID和课程ID。 注册有注册。 ID,学生证,班级ID和获得的成绩。

因此,总结一下,通过课程,找出哪些学生在注册中有超过2个与同一课程匹配的条目。到目前为止,我已经得到了这个:

   SELECT Student.id, Student.name FROM 
     Student S JOIN Registration R on S.id = R.studentID
        WHERE (SELECT COUNT(*) FROM 
            Course C JOIN Class L on L.courseId = C.id
                JOIN Registration R on R.classId = L.id
                    group by C.id ) > 2

问题是,以这种方式工作的Count和Group吗?他们是否允许我获得每组的比赛数量,或者他们是否只是给我结果,我担心他们会这样做?

如果是这样,关于如何解决这个问题的任何想法? 谢谢你的帮助!!

1 个答案:

答案 0 :(得分:1)

开始阅读 HAVING 子句。此外,您将Student别名为S,因此您需要为SELECT子句使用前缀“S”,而不是“Student”

SELECT S.id StudentID, S.name, C.id CourseID
FROM Student S
JOIN Registration R on S.id = R.studentID
JOIN Class L on R.ClassId = L.id
JOIN Course C on L.courseId = C.id 
GROUP BY S.id, S.name, C.id
HAVING COUNT(R.studentID) > 2;

所有4个表都被连接起来,产生一个结果集,代表所有注册任何课程类别的学生。然后我们GROUP BY学生课程组合,并使用HAVING子句找出注册超过2个的组合。当然,如果您的意思是“2或更多”而不是“超过2”,那么您可以使用> 1>= 2代替> 2