【问题标题】:MS-Access - unique recordsMS-Access - 唯一记录
【发布时间】:2015-09-12 03:55:13
【问题描述】:

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

【问题讨论】:

  • 感谢您的 cmets。为了更清楚一点,我想在左栏中显示所有学生 ID,并在第 2 列和第 3 列中显示已完成的测验数量和完成的唯一测验(即。我不想为一个特定的学生证)
  • 我在我的答案中添加了一个编辑,它使用了您的列和表名,并且包含所有 3 个请求的列。

标签: database ms-access ms-access-2007


【解决方案1】:

拥有表名和列名真的很有帮助,这样可以更轻松地根据您的确切设置调整答案。

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

as a 和 as 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

【讨论】:

  • 感谢您的回复。我的表名是:combine v2.我的列名是:StudentID 和 QuizName。如上所述:我想在左列中显示所有学生 ID,并在第 2 列和第 3 列中显示完成的测验数量和完成的唯一测验(即。我不想为一个特定的学生证)
  • 哇,布莱恩!这就像一个魅力。谢谢,谢谢,谢谢!
【解决方案2】:

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

SELECT DISTINCT NAME_OF_QUIZ FROM MYTABLE WHERE STUDENTID=?

【讨论】:

    【解决方案3】:
    SELECT DISTINCT tbl_Quizzes.Student, tbl_Quizzes.Quiz
    FROM tbl_Quizzes;
    

    或者进入查询设计窗口,右击选择属性,唯一值,是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 2015-10-15
      • 1970-01-01
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多