1

私にとってはうまくいくいくつかのクエリがあります:

Select Name,sum(number_hours)/8)*100
from 
T1
where name='PERSON_A'
group by name,booked_date

名前は常にwhere句に入れた1人の同一人物です。結果は次のようになります。

PERSON_A  100
PERSON_A  140
PERSON_A  120 

これは、予約された日付ごとに作業者の 1 日の稼働率を計算しています。今、私は平均的な毎日の使用率((120 + 120 + 100)/ 3 = 120)を計算したいのですが、

Select Name,AVG(sum(number_hours)/8)*100)
FROM
T1
WHERE name='PERSON_A'
group by name,booked_date

グループ関数の無効な使用というエラーが表示されます。なんで?毎日の使用率の値を集計した後、平均値を計算するにはどうすればよいですか。ありがとう

4

2 に答える 2

5

Try using a subquery for the sum and calculate the average in the outer query, like in:

SELECT Name, AVG (hsum)
FROM
(
    SELECT Name,sum((number_hours)/8)*100 AS hsum
    FROM
    T1
    WHERE name='PERSON_A'
    GROUP BY name,booked_date
) t
于 2013-01-07T11:11:22.137 に答える
2

すでに回答を受け入れていることを理解しています。しかし、これも試してみてください:)いいえsubquery。もかなり速い。Count of workdates日付を表示する列を追加しました。

* SQLFIDDLE デモ

サンプル データ テーブル:

ID      NAME    HOURS       WORKDATE
100     j       20          December, 03 2012 00:00:00+0000
200     k       10          December, 03 2012 00:00:00+0000
100     j       10          December, 04 2012 00:00:00+0000
300     l       20          December, 04 2012 00:00:00+0000
100     j       5           December, 05 2012 00:00:00+0000
300     l       15          December, 03 2012 00:00:00+0000
100     j       10          December, 04 2012 00:00:00+0000
400     m       20          December, 03 2012 00:00:00+0000

クエリ:

SELECT Name, ((sum(hours)/8)*100) AS sum
,count(distinct workdate) workdates, ((sum(hours)/8)*100)/count(
  distinct workdate) as avg    
FROM
    works
    WHERE name='j'
    GROUP BY name
;

結果:

NAME    SUM     WORKDATES   AVG
j       562.5   3           187.5
于 2013-01-07T11:55:18.623 に答える