计算所有列的平均值,然后计算输出差异

时间:2017-03-25 18:35:12

标签: mysql sql average

您好,我在确定查询错误时遇到了一些麻烦。

我正在尝试输出与事件名称无关的所有事件的平均成本。但是,在处理我的查询时,似乎在事件名称和平均值之间建立了连接。我相信查询会生成与该名称相关的每个事件的平均成本,而不是总平均值。一旦我得到平均值,我想只显示超出平均成本价格的事件。

查询:

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;

我确信这是一件非常简单的事情。提前致谢

1 个答案:

答案 0 :(得分:0)

您的查询中存在两个问题。第一个是因为您选择了event_name,所以您的平均值会在该级别进行计算;另一个问题是,您同时使用Event_Cost列并同时汇总,来自同一张表,并且这是不可能的。

您应该从内部查询中获取聚合值,并将其与您的初始表交叉连接,如此

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;