我有以下 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;
目前,这会查找在某个日期完成的类(class)的平均分数大于 50 的单个员工的平均分数,该分数是根据他们所做的各种测试计算得出的(一门类(class)可以有多个测试)。但是,现在我想计算在同一日期完成同一类(class)且分数大于 50 的员工数量。我假设您不能再次使用 GROUP BY,因为该语句已用于将员工在给定类(class)中完成的所有测试组合在一起。如果不使用 GROUP BY 语句,我将如何按此分组?
最佳答案
使用子查询 - 外部查询方法,如下所示(未测试):
select courseid, dateofcoursecompletion, count(employeeid) as employee_count
from (
select courseid, dateofcoursecompletion, employeeid
from tblteststakenbyemployee ttbe
inner join tblcoursestakenbyemployee ctbe using (employeeid)
where ctbe.hascompletedcourse = 'Y'
group by courseid, dateofcoursecompletion, employeeid
having avg(givenmark) > 50
)
group by courseid, dateofcoursecompletion
order by courseid, dateofcoursecompletion
;
请注意,您不需要 独特 在员 worker 数上。子查询中的聚合产生 (courseid, dateofcompletion, employeeid)
的不同三元组,所以在外部查询中,在每个组中由 (courseid, dateofcompletion)
员工 ID 已经不同了。
关于sql - 如何在单个 SQL 语句中两次使用 GROUP BY 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65061772/