gpt4 book ai didi

sql - 如何在单个 SQL 语句中两次使用 GROUP BY 语句?

转载 作者:行者123 更新时间:2023-12-04 08:30:16 24 4
gpt4 key购买 nike

我有以下 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com