dポイントプレゼントキャンペーン実施中!

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)."点";
でよいでしょうか。
ご教授願います。

A 回答 (3件)

SQLの集約関数、グループ化SELECTについて、勉強する事をお薦めします。



集計はasunsionの回答のように、SQLで簡単に実現できます。
合計にはSUM()を使えますが、この問題だけでなく、他の問題にも適用できるようにするには、基本を勉強した方が良いでしょう。

SELECT SUM(算数) AS 合計, AVG(算数) AS 平均
FROM testtable
WHERE 国語 <= 80;
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/14 17:53

asuncionさん、すみません・・・


呼び捨てにしてしまいました。

前の投稿でも書きましたが、集計の多くは、SQLで書けますし、
多分、PHPで計算するより簡単で、速いです。
    • good
    • 0

MySQLでは、平均値を求めるavg()が使えると思います。


もしかすると、こんなSQL文を発行すればうまくいくかもしれません。

select avg(算数の点数のカラム名) from testtable where 国語の点数のカラム名 <= 80
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/04/11 00:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!