2011-07-06 26 views
1

私はDB内のテーブルにある12個の列のそれぞれに対して平均を返す必要があります。 MySQLでは、1つのカラムに対して平均を取ることができます。 (1列の)次のクエリは動作します: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'の近くで使用してください。私が1列だけの平均を取得しようとするとうまくいきます。 WHERE element_name = " Temp_mean_mly " AND jan 'on line 1 –

+1

「DEC」はhttp://dev.mysql.com/doc/refman/5.5/en/reserved-words.htmlに従って予約語です。 'dec'の周りにバッククイックを入れてください。 – Hammerite

答えて

2

1064用

おかげ - あなたのSQL構文でエラーが発生しています。適切な構文が使用できるようにMySQLサーバのバージョンに対応するマニュアルをチェックしてください。

decは予約済みのMySQLキーワードです。あなたのクエリで `dec`に変更すると、おそらくあなたのためにそのエラーを修正するでしょう:)。

編集:あなたもWHERE句で使用していることに注意してください。 (MySQLがそこにキーワードを見つけるのは論理的ではないので)そこではうまくいくかもしれませんが、それを逃さなければならないかもしれないことに留意してください:)

+0

はい、魅力的なように働いていました:)エラーコードはしばしば自明ではありません:) –

+1

これは確実に機能しますか?あなたが値が-99999であるところ以外の月のデータの平均を取得しようとしているように見えます。あなたのクエリは、非常に異なる-99999で* any *の月を持つすべての行を除外します。方法を知りたい場合は、ここに投稿し、この回答を受け入れないでください。解決策を投稿します。 – Bohemian

+0

はい、あなたは正しいです!ここに新しい質問があります:http://stackoverflow.com/questions/6599136/mysql-and-average-of-multiple-columns-indivudual-condition-for-each-of-the-colu –