2011-10-31 9 views
1

以下は私のクエリでクエリ出力の行数に影響を及ぼしすべての行を選択したときに結果が13行になります。AVG機能は

ここで、各セッションの平均マークが必要です。したがって、クエリには'AVG(gr.Mark) as AvgMark'が含まれ、テーブルには<td>{$row['AvgMark']}</td>が含まれています。出力する計算が正しい問題は、クエリがクエリ結果の一番上の行である1行だけを出力するということです。 AVG(gr.Mark)は、出力時に1行しか必要としないため、これを理解しています。

私の質問は、AVG(gr.Mark)をAVG(gr.Mark)としてAvgMarkとして使用すること以外は、各セッションの平均マークを見つけるために、PHPを使用してクエリ外の各マークの平均を取る方法があるかどうかです。クエリ出力は13行を示し、影響を受けないので、テーブルの代わりにテーブルの下に平均の計算を保存できますか?

+0

代わりにどのような結果が期待されますか?あなたが* 'GROUP BY'節を全く持っていない場合には、各マークの平均はどういう意味ですか? – zerkms

+0

私は、各セッション(テスト)の平均マークを選択するのにSELECT節を使用したくないということです。 $ row ['Mark']を検索し、PHPのAVGを使って平均を求め、それをテーブルではなくテーブルの下に格納することで、各マークの平均を計算するPHPを使って関数を作成できますか?私はこれを達成するために構文を使う方法を知らない。 – BruceyBandit

答えて

1

AVGが1行を返す理由は、それが集約関数であり、GROUP BY句がすべての行に作用しないためです。

PHPの平均は他のどこでも平均と同じです。あなたの値を合計し、サンプル数で割ります。したがって、コードを次のように変更することで、コードの平均を簡単に計算できます。

 <?php 
     $total = 0; 
     $count = 0; 
     while ($row = mysql_fetch_array($result)) { 
      $count++; 
      $total += $row['Mark']; 
      echo " 
     <tr> 
     <td>{$row['SessionId']}</td> 
     <td>{$row['StudentUsername']}</td> 
     <td>{$row['StudentForename']} {$row['StudentSurname']}</td> 
     <td>{$row['Mark']}</td> 
     <td>{$row['Grade']}</td> 
     </tr>"; 
     } 
$average = (int)($total/$count); 
echo "<tr><td colspan=3></td><td>Average</td><td>$average</td></tr>". 
+0

ありがとう、私は今、PHPを使用して合計、数と平均を行う方法を理解している歓声:) – BruceyBandit

+0

@マユールパテル問題はありません。 –