2016-07-07 12 views
3

を関与:平均は、私はテーブルの下<code>score</code>からこのデータを持っている

Select id, (avg(A)+avg(B))/2 as Average 
from score 
Group by id; 
を:

No ! id ! A  ! B ! average ! 
------------------------------------------ 
1 ! 01 ! 80  ! 60 ! 70 ! 
2 ! 02 !   ! 60 ! 30 ! 
3 ! 03 ! 0  ! 60 ! 30 ! 
4 ! 04 ! 80  !  ! 40 ! 

私は、列AとBの平均は以下のコードを使用して取得したいです

問題は、id 02id 04には1つのデータしかありません。平均値はデータなしの代わりに0とカウントされます。私が欲しい

表には、私はテーブルの下scoreからこのデータを持っている。このよう です:

No ! id ! A  ! B ! average ! 
------------------------------------------ 
1 ! 01 ! 80  ! 60 ! 70 ! 
2 ! 02 !   ! 60 ! 60 ! 
3 ! 03 ! 0  ! 60 ! 30 ! 
4 ! 04 ! 80  !  ! 80 ! 

誰も私を助けることができますか?

答えて

3

は、この文字列で検索してください:ここ

SELECT id, (SUM(COALESCE(A,0)) + SUM(COALESCE(B,0)))/(COUNT(A) + COUNT(B)) 
FROM score 
GROUP by id 

トリックはCOUNTで割っSUMを取って、そしてNULL値を処理するために適切にCOALESCE()を使用することによって、バラバラに平均値を計算することです。 MySQL集約関数(SUMCOUNTなど)は、デフォルトではNULLの値を無視することに注意してください。

クエリをテストしましたが、ABを超える列を追加できますが、それでも機能しているようです。

デモ:それはどのように私は、PHPでそれを呼び出すことができ、より多くの質問をworks..one):)

SQLFiddle

+0

素晴らしいですか? $ sql = "SELECT id、(SUM(COALESCE(A、0))+ SUM(COALESCE(B、0)))/(COUNT(A)+ COUNT(B)) FROMスコア GROUP by ID"; $ result_arraysql = mysql_query($ querysql);$ linesql = mysql_fetch_array($ result_arraysql);私が<?php echo $ myData ['lineled7apehh']と呼んだとき。 ?>それは何も表示しない – gtviga

+0

@gtvigaこれは長い答えを必要とし、確かにコメントに収まらない。この質問を参考にして、新しい質問をしたいかもしれません。私はあなたがPHPでこれをどう呼ぶかについての素早い答えを得られると確信しています。また、いくつかのチュートリアルを読み、これを行う方法を学ぶこともできます。 –

0

整数フィールドに浮動小数点平均を設定することはできません。残念なことに、平均化すると整数結果が得られるので、0と1などの平均は0になります。つまり、あなたの「平均」は少なくともMIN()の列の値列内のMAX()の値を超えないようにします。浮動小数点数を整数と同じ列に報告する場合は、整数列にしないでください。

関連する問題