【发布时间】:2020-11-30 03:31:10
【问题描述】:
我有以下 SQL 查询:
SELECT CourseId, DateOfCourseCompletion, COUNT(DISTINCT EmployeeId) FROM tblTestsTakenByEmployee ttbe
INNER JOIN tblCoursesTakenByEmployee ctbe USING (ctbe.EmployeeId)
WHERE ctbe.HasCompletedCourse = 'Y'
GROUP BY ctbe.CourseId, ctbe.DateOfCourseCompletion, ctbe.EmployeeId
HAVING AVG(ttbe.GivenMark) > 50
ORDER BY ctbe.CourseId, ctbe.DateOfCourseCompletion;
目前,这会查找在某个日期完成的课程的平均分数大于 50 的单个员工的平均分数,该分数是根据他们完成的各种测试计算得出的(一个课程可以有多个测试)。
但是,现在我想计算在同一日期完成同一课程的分数大于 50 的员工人数。我假设您不能再次使用 GROUP BY,因为该语句已经用于将员工在给定课程中完成的所有测试组合在一起。如果不使用 GROUP BY 语句,我将如何按此分组?
【问题讨论】:
-
当查询连接表时,在每个列名前加上表名或表别名是非常重要的。您可能很清楚每列的来源,但它不适合我们。
-
最简单且最有效的方法是将您的第一个查询设为sub查询。然后在外部查询中从子查询中选择。