MS-Access - 唯一记录

MS-Access - unique records

我有一个包含很多学生的数据集,每个学生都有自己的学号。每个学生都完成了多次测验。他们经常不止一次地做一个测验。我可以很容易地找出每个学生总共完成了多少个测验,但我也想知道每个学生完成了多少个不同的独特测验。例如,一个学生可能已经完成了 6 个测验,但他们只完成了 3 个独特的测验(也许每个独特的测验他们都做了两次)。我如何在 Access 中执行此操作?

您想在 SQL 查询中使用 DISTINCT 谓词。由于我不知道你的 table 长什么样,我只是给你举个例子:

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

或进入查询设计 window,右键单击它并选择“属性”、“唯一值”、“是”。

拥有 table 的名称和列名称真的很有帮助,这样可以更轻松地根据您的确切设置对答案进行微调。

为了这个例子,我们假设您有一个名为 Table1 的 table,它有列 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)在这种情况下称为子查询,这意味着它是查询中的查询。此子查询的目的是获得一个结果 table,然后您可以从中获得一个计数,其中只有学生参加的独特测验,这是通过关键字 Distinct 完成的。

as aas QuizCount 称为别名。表和列可以使用别名,通常用于不必重复输入长 table 名称、提高查询的可读性、命名聚合函数的结果列(如 count、avg、sum)等目的等等,因为如果没有提供别名,聚合函数的结果列名类似于 EXR1000.

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

编辑:使用我们提供的 table/column 名称的版本:

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