【问题标题】:Finding AVG value in SQL Query after SUM - Invalid use of group functionSUM 后在 SQL 查询中查找 AVG 值 - 组函数的使用无效
【发布时间】:2013-01-07 11:08:48
【问题描述】:

我有一些适合我的查询:

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

我收到错误无效使用组功能。为什么?在汇总日常使用值后如何计算平均值。 谢谢

【问题讨论】:

    标签: mysql sql sum average


    【解决方案1】:

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

    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
    

    【讨论】:

    • @ederbf 不过会有两个语法错误。您需要为 内表提供表别名。而sum(number_hours)/8) 缺少括号。不多,但仍然;)
    【解决方案2】:

    我知道您已经接受了答案。但是也试试这个:) 不subquery。也蛮快的。我添加了额外的Count of workdates 列供您查看日期。

    * SQLFIDDLE DEMO

    样本数据表:

    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
    

    【讨论】:

    • @stefke 这是另一种方法;) 也检查Explain Plan
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-01
    • 2018-07-27
    • 2011-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多