拥有表名和列名真的很有帮助,这样可以更轻松地根据您的确切设置调整答案。
为了这个例子,我们假设您有一个名为 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