我挣扎Q10 - http://sqlzoo.net/a1m.htmSQL问题 - 中等难度
我不明白的是如何计算每个工作人员的平均小时,我还需要在把发生表到这一权利?
ERD图就在这里 - http://sqlzoo.net/a1.htm
任何帮助,将不胜感激!
我挣扎Q10 - http://sqlzoo.net/a1m.htmSQL问题 - 中等难度
我不明白的是如何计算每个工作人员的平均小时,我还需要在把发生表到这一权利?
ERD图就在这里 - http://sqlzoo.net/a1.htm
任何帮助,将不胜感激!
这可能会导致一些笨拙的答案,但首先我通常在MSSQL T-SQL中工作,其次,该站点似乎不支持多个命令,因此您不能使用一个proc来编写一个proc变量和东西,除非我失去了一些东西。
你得到一个特定的职员教通过参加所有事件的列表教导的事件 - 事件ID对前和ID对后者:
select * from event e
inner join teaches t
on t.event = e.id
已经得到这个数据集,那么你可以使用聚合函数'sum'在event.duration字段中计算总小时数。如果你只是简单地总结一下,你会得到整个数据库中所有事件的总长度,但是如果你在工作人员ID上使用'group by',它会分别总结每个员工的小时数 - group by是很漂亮的与聚合函数很多重要的工作时:
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
这会给你平均小时数。你不需要'发生'表,因为问题并不在乎你谈论的那个星期,而只是询问员工在事件中花费了多少时间。
感谢您的回应杰克!我今天仍然试图把这一切都放在一起后...这里是我所列出的: –
select x.staff,contacthours/quantity as average from(select teachhes.staff,sum(duration)as contactHours 从教导, 事件 其中teaches.event = event.id 组由teaches.staff)X, (选择teaches.staff,COUNT(*)从量 通过teaches.staff教导 组)Y 其中x.staff = y.staff HAVING contactHours/quantity> –
我的计算似乎关闭了一个... –
你不需要每个工作人员的平均时间。你需要所有员工的平均水平。 –