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