SQL 使用自连接和计数的查询问题
SQL query issue using self join and count
你好,我正在尝试 运行 我的最后一年项目的特定查询,我想在其中找出 2014 年和 2016 年学习计算机科学的本科生人数。我使用的表格是coursesEnrollments & courses 记录注册计算机科学课程的学生人数。
我的主管帮助我,他建议我在 courseEnrollments 上使用自加入,这样可以更轻松地为 2014 年和 2016 年注册的学生找到相同的 CS 注册。下面的查询显示了我是如何编写的:
SELECT COUNT(*)
FROM courseEnrollment
WHERE StudentID IN
(SELECT X.StudentID
FROM courseEnrollment Y
JOIN courseEnrollment X
ON Y.courseID = X.courseID
JOIN courses C
ON Y.courseID = C.courseID
WHERE C.courseName = 'Computer Science'
AND X.StartAcademicYear = 2014
AND Y.StartAcademicYear = 2016);
当我在 MySQL 上 运行 时,我得到了错误的结果(4 而不是 6),因为它只计算了 2014 年而不是 2016 年注册计算机科学的学生。请告诉我如何解决这个问题。谢谢!
P.S。我只在内部查询中添加 "X.StudentID" 以阻止 MySQL 与 StudentID attribute.Changing 混淆它到 "Y.StudentID" 给了我 2。同样,我想知道为什么它不是算上计算机科学专业的所有 6 名学生(2 名 2016 年入学,4 名 2014 年入学)。
如果任何学生只能一次上这门课:
SELECT COUNT(*)
FROM courseEnrollment ce
JOIN courses c ON ce.courseid=c.courseid
WHERE c.courseName = 'Computer Science' AND
ce.startAcademicYear IN (2014, 2016)
你好,我正在尝试 运行 我的最后一年项目的特定查询,我想在其中找出 2014 年和 2016 年学习计算机科学的本科生人数。我使用的表格是coursesEnrollments & courses 记录注册计算机科学课程的学生人数。
我的主管帮助我,他建议我在 courseEnrollments 上使用自加入,这样可以更轻松地为 2014 年和 2016 年注册的学生找到相同的 CS 注册。下面的查询显示了我是如何编写的:
SELECT COUNT(*)
FROM courseEnrollment
WHERE StudentID IN
(SELECT X.StudentID
FROM courseEnrollment Y
JOIN courseEnrollment X
ON Y.courseID = X.courseID
JOIN courses C
ON Y.courseID = C.courseID
WHERE C.courseName = 'Computer Science'
AND X.StartAcademicYear = 2014
AND Y.StartAcademicYear = 2016);
当我在 MySQL 上 运行 时,我得到了错误的结果(4 而不是 6),因为它只计算了 2014 年而不是 2016 年注册计算机科学的学生。请告诉我如何解决这个问题。谢谢!
P.S。我只在内部查询中添加 "X.StudentID" 以阻止 MySQL 与 StudentID attribute.Changing 混淆它到 "Y.StudentID" 给了我 2。同样,我想知道为什么它不是算上计算机科学专业的所有 6 名学生(2 名 2016 年入学,4 名 2014 年入学)。
如果任何学生只能一次上这门课:
SELECT COUNT(*)
FROM courseEnrollment ce
JOIN courses c ON ce.courseid=c.courseid
WHERE c.courseName = 'Computer Science' AND
ce.startAcademicYear IN (2014, 2016)