1

我有一些对我来说很好的查询:

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

姓名始终是我放在 where 子句中的一个人。结果将是:

PERSON_A  100
PERSON_A  140
PERSON_A  120 

这是计算每个预定日期的工作人员的一些日常使用情况。现在我想计算平均每日利用率((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

尝试对总和使用子查询并计算外部查询中的平均值,例如:

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 回答