Sql 消除重复工作时间
我试图计算每个用户的总培训小时数。 课程类型可以是1型,也可以是2型 我的问题是课程时间被重复计算,总共10小时。请查看我的预期结果下面的更多信息Sql 消除重复工作时间,sql,sql-server,Sql,Sql Server,我试图计算每个用户的总培训小时数。 课程类型可以是1型,也可以是2型 我的问题是课程时间被重复计算,总共10小时。请查看我的预期结果下面的更多信息 SELECT userid, training1.coursehours + training2.coursehours As totalhours from user left join (select sum(hours) as coursehours, userid from usercourses inner
SELECT userid, training1.coursehours + training2.coursehours As totalhours
from user left join
(select sum(hours) as coursehours, userid
from usercourses inner join
courses
on courses.courseid = usercourses.courseid
where coursetype=1
group by userid
) training1 left join
(select sum(hours) as coursehours, userid
from usercourses inner join
courses
on courses.courseid = usercourses.courseid
where coursetype=2
group by userid
) training2
让我们假设课程123是5小时,类型为1和2,这使得它有资格出现在左侧和右侧。预期结果应为:
UserID TotalHours
546 5
其他信息。
UserCourses表的数据:
userid CourseID
546 123
courseid coursetypeid hours
123 1 5
123 2 5
课程表数据:
userid CourseID
546 123
courseid coursetypeid hours
123 1 5
123 2 5
您只需要条件聚合吗
select uc.user_id,
sum(case when uc.coursetype = 1 then c.hours end) as hours_1,
sum(case when uc.coursetype = 2 then c.hours end) as hours_2,
sum(hours) as total_hours
from usercourses uc inner join
courses c
on c.courseid = uc.courseid
group by uc.user_id;
如果有许多用户没有任何时间,则只需
左键联接用户
表。请标记您正在使用的DBMS。如果表中有示例数据,则会有所帮助。此SQL代码应该出错吗form user
@JesseLi I添加了示例数据如果topicstarter数据只有两种coursetype类型,他可以选择将其优化为选择sum(小时)作为总小时数,sum(当uc.coursetype=1时,则为uc.hours end)作为小时数1,(sum(小时)-sum(当uc.coursetype=1时,则为uc.hours end时)假设topicstarters RDMS将聚合计算缓存为优化器/执行部分中的常量,则。。