如何在MS Access多表内连接查询中统计符合条件的学生数?
MS Access中统计多表关联筛选后的学生总数
你的原查询已经能筛选出符合条件的学生(有缺课、成绩2分、未获准上课),要统计这类学生的总数,有两种简单的修改方式:
方法一:直接修改原查询,用COUNT(DISTINCT)统计
把原查询的SELECT students.Student替换为统计唯一学生的语句,同时去掉GROUP BY students.Student(因为COUNT(DISTINCT)会自动处理去重):
SELECT COUNT(DISTINCT students.IDstudent) AS TotalQualifiedStudents FROM specialty INNER JOIN (groups INNER JOIN ((mark INNER JOIN students ON mark.idstudent = students.IDstudent) INNER JOIN miss ON students.IDstudent = miss.IDstudent) ON (groups.IDgroup = students.IDgroup) AND (groups.IDgroup = miss.IDgroup)) ON specialty.IDspecialty = groups.IDspecialty WHERE specialty.Name = '" + DateFind.otdel + "'
- 用
IDstudent而非Student是因为学生姓名可能重复,ID作为唯一标识更准确; COUNT(DISTINCT)确保同一个学生不会被重复统计。
方法二:将原查询作为子查询统计总数
如果想保留原查询的结构,也可以把它作为子查询,外层用COUNT(*)统计行数:
SELECT COUNT(*) AS TotalQualifiedStudents FROM ( SELECT students.Student FROM specialty INNER JOIN (groups INNER JOIN ((mark INNER JOIN students ON mark.idstudent = students.IDstudent) INNER JOIN miss ON students.IDstudent = miss.IDstudent) ON (groups.IDgroup = students.IDgroup) AND (groups.IDgroup = miss.IDgroup)) ON specialty.IDspecialty = groups.IDspecialty WHERE specialty.Name = '" + DateFind.otdel + "' GROUP BY students.Student ) AS QualifiedStudents
这里子查询返回的是符合条件的学生列表,外层COUNT(*)直接统计这个列表的行数,就是学生总数。
补充说明
你之前尝试的SELECT COUNT(student) FROM students.student WHERE写法错误,一是表名和字段名混淆(students.student是表.字段,但你写的FROM students.student相当于把字段当表名了),二是没有包含原查询的多表关联和筛选条件,自然得不到正确结果。
内容的提问来源于stack exchange,提问作者Xazmadan 939-59
相关产品推荐
相关产品推荐

