• ベストアンサー

PHP+MySQLから結果セット取得後の計算方法

PHP+MySQLから結果セット取得後の計算方法を教えてください。 イメージは以下になります。 以下、testtable とします。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 C 95 30 50 90 D 100 95 85 90 そこで、国語が80点以下の生徒を検索し、抽出した生徒の算数平均点数を導きたいのです。 //国語が80点以下の生徒を抽出 $sql="SELECT * from testtable WHERE 国語<=80"; $rst= mysql_query($sql); 上記で国語が80点以下の生徒を検索出来たと思うのです。 イメージは下記になります。 生徒|国語|算数|理科|社会 A 60 80 90 60 B 80 60 70 65 算数の平均を求めるので、(80+60)/2の式を書きたいのです。 平均の2は、mysql_num_rows($rst)で導き出せるのですが、 (80+60)の部分がわかりません。 while ($col = mysql_fetch_array($rst)){ $sum=$sum+$col[算数];} $body.= "平均".$sum/mysql_num_rows($rst)."点"; でよいでしょうか。 ご教授願います。

質問者が選んだベストアンサー

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.2

SQLの集約関数、グループ化SELECTについて、勉強する事をお薦めします。 集計はasunsionの回答のように、SQLで簡単に実現できます。 合計にはSUM()を使えますが、この問題だけでなく、他の問題にも適用できるようにするには、基本を勉強した方が良いでしょう。 SELECT SUM(算数) AS 合計, AVG(算数) AS 平均 FROM testtable WHERE 国語 <= 80;

php2864
質問者

お礼

ありがとうございました。 SQLの文法?の専門書を見つけました。 PHPの本しか見ていなかったので、こんなに奥が深いとは思いませんでした。逆引きの本など参考になりました。 これから追及していきたいと思います。

その他の回答 (2)

  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

asuncionさん、すみません・・・ 呼び捨てにしてしまいました。 前の投稿でも書きましたが、集計の多くは、SQLで書けますし、 多分、PHPで計算するより簡単で、速いです。

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

MySQLでは、平均値を求めるavg()が使えると思います。 もしかすると、こんなSQL文を発行すればうまくいくかもしれません。 select avg(算数の点数のカラム名) from testtable where 国語の点数のカラム名 <= 80

php2864
質問者

お礼

ありがとうございます。後でやってみたいと思います。参考にします。 あと、合計点数も表示してみたいと思うので、算数の点数のカラムに配列されている値の扱い方法を教えていただけると幸いです。 よろしくお願いします。

関連するQ&A