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,它有列 Student 和 Quiz, 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 a
和 as 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
我有一个包含很多学生的数据集,每个学生都有自己的学号。每个学生都完成了多次测验。他们经常不止一次地做一个测验。我可以很容易地找出每个学生总共完成了多少个测验,但我也想知道每个学生完成了多少个不同的独特测验。例如,一个学生可能已经完成了 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,它有列 Student 和 Quiz, 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 a
和 as 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