2016-08-08 11 views
0

テーブルの各行にAVGを取得する必要があります。我々はMYSQL各行にAVGを取得

id val 
1 5 
2 6 
3 7 

を考えてみましょう私は

id val 
1 0.277 (5/18) 
2 0.333 (6/18) 
3 0.388 (7/18) 

を取得する必要があり、私は簡単に同じテーブルと結合することなく、MYSQLでこれを取得することはできますか?

+1

あなたが得ようとしているものは*平均*ではありません。 28はどこから来ますか? –

+0

申し訳ありません - そのタイプミスです。それは18でなければならない。私は質問 –

答えて

1

val列を合計し、その合計でval列を分割できます。

select id, 1.0*val/(select sum(val) from tablename) val 
from tablename 
+0

を編集これは唯一の方法ですか?私は「同じテーブルに入らずに」する必要があることに気付きました。これは、私のデータを複雑にするための最初のクエリと私はそれを2回実行したくないためです( –

+0

@VladimirGordienkoそれは結合ではない、素朴なアプローチでさえ、2つの別々のスキャンを行うだろう - 合計、 – nimdil

+0

本当に、サブクエリを使ってテストを行い、MYSQLが同じクエリを2度実行しないように見えます。この解決策は私にとっては大丈夫です。 –