2017-03-25 78 views
1

您好,我在確定我的查詢出了什麼問題時遇到了一些麻煩。計算所有列的平均值,然後輸出差異

我想輸出與事件名稱無關的所有事件的平均成本。但是,在處理我的查詢時,似乎在事件名稱和平均值之間建立了連接。我相信查詢會生成與該名稱相關的每個事件的平均成本,而不是總平均值。一旦我有我想要的平均值,然後只顯示超出平均成本價格的事件。

查詢:

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; 

我相信這是很簡單的東西我失蹤。在此先感謝

回答

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; 
+0

我編輯我的答案,第一個版本是在回答到一個不同的問題:) –

+0

awwww那現在有道理:)我嘗試做一個內部選擇,但我沒有給第一個表別名。謝謝你的幫助。 –