0

我正在使用标准 SQL 进行锻炼查询。在这个例子中,我需要的是获取每个参加任何课程超过 2 次的学生的姓名和 ID。在这种情况下,表格包含以下信息(我将仅列出对本练习重要的列):

学生有学生的 ID 和姓名。课程具有课程 ID。类具有组 ID 和课程 ID。注册有 reg。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 by 是否以这种方式工作?他们是否允许我获得每组的比赛数量,或者他们只是给我在片场的结果,就像我担心的那样?

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

4

1 回答 1

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找出注册人数超过2个的人。HAVING当然,如果您的意思是“2 或更多”而不是“超过 2”,您将使用> 1or>= 2代替> 2.

于 2013-04-26T00:28:56.480 回答