繁体   English   中英

MS-Access-唯一记录

[英]MS-Access - unique records

我有一个包含很多学生的数据集,每个学生都有自己的学生编号。 每个学生都进行了多次测验。 他们经常不止一次进行测验。 我可以轻松地找出每个学生总共完成了多少个测验,但我也想找出每个学生完成了多少个不同的独特测验。 例如,一个学生可能已经完成了6次测验,但他们仅完成了3次独特测验(也许他们对每个独特测验进行了两次)。 如何在Access中做到这一点?

您想在SQL查询中使用DISTINCT谓词。 由于我不知道您的桌子是什么样子,所以我仅举一个例子:

SELECT DISTINCT NAME_OF_QUIZ FROM MYTABLE WHERE STUDENTID=?
SELECT DISTINCT tbl_Quizzes.Student, tbl_Quizzes.Quiz
FROM tbl_Quizzes;

或者进入“查询设计”窗口,右键单击它,然后选择“属性”,“唯一值”,“是”。

拥有表名和列名将确实有帮助,因此可以轻松地将答案调整为更精确的设置。

在本例中,我们假设您有一个表,称为Table1,表中有StudentQuiz列,quiz是所进行的测验的名称(唯一标识符)。

一个用于获取学生进行的独特测验次数的sql看起来像这样:

Select a.Student, count(a.Quiz) as QuizCount
From (Select Distinct Student, Quiz from Table1) as a
Group by a.Student

在这种情况下(Select Distinct Student, Quiz from Table1)称为子查询,这意味着它是查询内部的查询。 此子查询的目的是获得一个结果表,然后您可以从中得到一个计数,该计数仅具有学生通过关键字Distinct完成的唯一测验。

as aas QuizCount称为别名。 可以对表和列进行别名处理,并且通常是出于以下目的:不必重复键入较长的表名;可以提高查询的可读性;可以为聚合函数(例如count,avg,sum等)命名结果列,因为如果未提供别名,则聚合函数的列名称将类似于EXR1000。

最后,结果集中的任何非聚合函数结果的列(例如a.Student)都需要放入Group By语句中。

编辑:使用我们提供的表/列名称的版本:

Select b.StudentID, Count(b.QuizName) as TotalQuizCount, c.UniqueQuizCount
From [combine V2] as b
Inner Join (SELECT [a].StudentID, Count([a].QuizName) as UniqueQuizCount
from (SELECT Distinct StudentID, QuizName
FROM [combine V2] ) as a 
Group By a.StudentID) as c ON b.StudentID = c.StudentID
Group By b.StudentID, UniqueQuizCount

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM