2011-02-08 78 views

回答

1

这可能会导致一些笨拙的答案,但首先我通常在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 

这会给你平均小时数。你不需要'发生'表,因为问题并不在乎你谈论的那个星期,而只是询问员工在事件中花费了多少时间。

+0

感谢您的回应杰克!我今天仍然试图把这一切都放在一起后...这里是我所列出的: –

+0

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> –

+0

我的计算似乎关闭了一个... –