2011-02-08 11 views
0

からhttp://sqlzoo.net/a1m.htmSQLの質問 - 私はQ10に苦労していますミディアム難易

私は理解していないが、各スタッフの平均時間を計算する方法であると私はまたに持参する必要があります。この権利に表を発生します?

ERDダイアグラムここにある - http://sqlzoo.net/a1.htm

任意の助けいただければ幸いです!

+0

各スタッフの平均時間は必要ありません。すべてのスタッフの平均が必要です。 –

答えて

1

これは少し不器用な回答につながる可能性がありますが、私は通常MSSQL T-SQLで作業し、2つ目はサイトが複数のコマンドをサポートしていないように見えるので、procを書くことはできません変数やもの、私は何かを欠場していない限り。

あなたは、特定の職員が参加して教えたすべてのイベントのリストを取得するには、イベントに教えて - 前者と後者のIDのイベントIDを:

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'をグループ化せずに使用できます。なぜなら、実際にはデータセット全体を処理したいからです。しかし、各職員の時間をカウントするためにグループバイングが必要なので、2つの選択肢を分ける必要があります.1つの方法はサブ選択であり、ここでは「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 teaches.staff、sum(duration)as教示からcontactHours 、teaches.staffによって イベントteaches.event = event.id 基)X、 (teaches.staffを選択し、カウント(*)teaches.staffによって 群を教示から量 など)Y ここで、x.staff = y.staff contactHours/quantity> –

+0

私の計算はオフのようです... –

関連する問題