你好,我在确定我的查询有什么问题时遇到了一些困难。
我试图输出与事件名称无关的所有事件的平均开销。但是,在处理我的查询时,事件名和平均值之间似乎建立了连接。我相信查询生成的是与该名称相关的每个事件的平均成本,而不是总平均成本。一旦有了平均值,我就只想显示超出平均成本价格的事件。
查询:

SELECT Event_Name AS 'Event Name'
              ,ROUND(Event_Cost) AS 'Event Cost'
              ,ROUND(AVG(Event_Cost)) AS 'Average Cost Of Events'
              ,ROUND(Event_Cost - AVG(Event_Cost)) AS 'Amount Over Average £'
FROM Event
WHERE Event_Cost > (SELECT AVG(Event_Cost) FROM Event)
GROUP BY Event_Name;

我确信这是我真正缺少的东西。提前谢谢

最佳答案

查询中有两个问题。第一个问题是,由于您选择了事件名称,因此您的平均值是在该级别计算得出的;另一个问题是,您同时使用来自同一表的Event_Cost列as is和aggregated,这是不可能的。
您应该从内部查询获取聚合值,并将其与初始表交叉连接,如下所示

SELECT  t1.Event_Name AS 'Event Name',
        ROUND(Event_Cost) AS 'Event Cost',
        ROUND(t2.aver) AS 'Average Cost Of Events',
        ROUND(Event_Cost - t2.aver) AS 'Amount Over Average £'
FROM    Event t1
CROSS JOIN
        (
            SELECT  AVG(Event_cost) as aver
            FROM    Event
        ) t2
WHERE   t1.Event_Cost > t2.aver;

关于mysql - 计算所有列的平均值,然后输出差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43020346/

10-16 08:13