我在Q10上挣扎 - http://sqlzoo.net/a1m.htm
我不明白的是如何计算每个工作人员的平均时间,我还需要将发生的表格纳入此权利?
ERD图表在这里 - http://sqlzoo.net/a1.htm
任何帮助将不胜感激!
答案 0 :(得分:1)
这可能会导致一些笨拙的答案,但首先我通常使用MSSQL T-SQL,其次该网站似乎不支持多个命令,因此您无法使用变量编写proc和东西,除非我遗漏了什么。
通过加入有关事件的教学,您可以获得特定职员教授的所有事件的列表 - 即使是前者,也可以是后者的身份:
select * from event e
inner join teaches t
on t.event = e.id
获得此数据集之后,您可以在event.duration字段上使用聚合函数“sum”来计算总小时数。如果您直接总结它,您将获得整个数据库中所有事件的总长度,但如果您在员工ID上使用“分组依据”,它将分别汇总每个员工的工作时间 - 分组依旧使用聚合函数时非常重要:
select t.staff as staff, sum(duration) as contactHours from event e
inner join teaches t
on t.event = e.id
group by t.staff
您可以使用这些数据来计算平均教学时数,就像用笔和纸计算平均值一样 - 将每个职员的小时数除以工作人员的数量。这次我们可以使用聚合函数'count'和'sum'而不进行分组,因为我们确实想要处理整个数据集。但是,因为我们需要group-by来计算每个职员的工作时间,所以我们需要将两个选项分开......一种方式是作为子选择,这里我称之为'staffContact':
select sum(contactHours) / count(staff) as averageHours
from
(
select t.staff as staff, sum(duration) as contactHours from event e
inner join teaches t
on t.event = e.id
group by t.staff
) staffContact
这会给你平均时间。你不需要'发生'表,因为这个问题并不关心你在谈论哪个星期,而只是询问员工在活动中花费了多少时间。