2011-07-06 87 views
1

我需要爲DB中的表中的每個12列返回平均值。 MySQL只允許一個列的平均值。 (一列)下面的查詢工作:MySQL和多列的平均值

SELECT station_id, AVG(jan) AS avg_jan 
FROM `climate_data` 

WHERE element_name = "Temp_mean_mly" AND jan <> -999999 
GROUP BY station_id 

及以下(多列)不會(我得到的語法錯誤):

SELECT station_id, AVG(jan) AS avg_jan, AVG(feb) AS avg_feb, ... , 
AVG(dec) AS avg_dec 
FROM `climate_data` 

WHERE element_name = "Temp_mean_mly" 
AND jan <> -999999 
AND feb <> -999999 
AND ... 
AND dec <> -999999 
GROUP BY station_id 

我一定要使用12子查詢取得我需要的結果?

感謝您的幫助

+0

「不工作」在這裏有點模糊。您能否至少告訴我們您希望後者查詢做什麼以及它做了什麼(錯誤)? – Yhn

+0

當然。我的意思是它不能被解析。這是我得到的錯誤:#1064 - 你的SQL語法有錯誤;檢查與你的MySQL服務器版本相對應的手冊,在'dec)AS avg_dec FROM'climate_data'附近使用正確的語法。當我嘗試只爲一列獲得平均值時,它工作正常。 WHERE element_name = " Temp_mean_mly " AND jan'in line 1 –

+1

'DEC'是根據http://dev.mysql.com/doc/refman/5.5/en/reserved-words.html的保留字。在'dec'周圍反過來。 – Hammerite

回答

2

1064 - 你在你的SQL語法錯誤;檢查與您的MySQL服務器版本對應的手冊,以便在「dec」附近使用正確的語法

dec是保留的MySQL關鍵字;在您的查詢中將其更改爲「dec」可能會爲您解決該錯誤:)。

編輯:請注意,您也在WHERE子句中使用它;它可能在那裏工作(因爲它在MySQL中找到一個關鍵字是不合邏輯的),但請記住,你可能也必須逃避那一個:)

+0

是的,像魅力一樣工作!:)錯誤代碼往往不是自我解釋:) –

+1

你確定這個工作?因爲它看起來像你試圖得到月份數據的平均值,除非值是-99999。您的查詢排除了具有* 9999的任何*月份的所有行,這是非常不同的。如果你想知道如何去做,請在這裏發帖並取消接受這個答案,然後我會發布解決方案。 – Bohemian

+0

是的,你是對的!這裏是新的問題:http://stackoverflow.com/questions/6599136/mysql-and-average-of-multiple-columns-indivudual-condition-for-each-of-the-colu –