PR
表1●SQLの代表的な集合関数
図4●inner join(等結合)による集計処理のイメージ
図5●リスト2を実行したところ

ポイント3
SQLの集合関数を使って合計や平均を計算

 集計処理のだいご味は,なんといっても個数のカウントやパーセンテージの計算など,統計的な値を求めることでしょう。リスト2の後半を見てください。(4)のSQL文で,集合関数countを使ってアンケートの回答件数を数えています。つまり,何人がアンケートに答えてくれたかを求めているわけです。

 SQLの集合関数には,件数を求めるcountのほかに,合計を求めるsumや平均を求めるavgなどがあります(表1)。いずれもgroup by節を使って,何らかのグループにまとめて計算するのが一般的ですが,テーブルのすべてのレコードを対象とする場合は(4)のようにgroup by節を省きます。

 各質問の回答件数を集計する(5)のSQL文を見てみましょう。ここでは,tottb(集計用テーブル)とanstb(回答テーブル)の二つのテーブルから値を取得して集計しています。tottbのtqnoとanstbのaqno,tottbのtanoとanstbのanoで,二つのテーブルをinner join(等結合)*6していますね。集計結果は,tano(回答番号),atext(回答内容),ctans(回答件数)の三つの項目にまとめます(図4[拡大表示])。where節の変数$qnoにはqustb(質問テーブル)のqno(質問番号)が入り,group by節でtano(回答番号)でグループ化しているので,ctansにはその回答を選択した読者の数(回答件数)が格納されるわけです。(6)は,まとめた結果をWebページとして出力する処理になります。

 では,リスト2(total.php)を実行してみましょう。Webブラウザを起動して, href="http://127.0.0.1/sample/total.phpa" target=_window>http://127.0.0.1/sample/total.phpaにアクセスしてください。集計処理を実行し,各質問に対して,回答数と回答率(パーセンテージ)を表示していることがわかると思います(図5[拡大表示])。

 パーセンテージの計算と表示のコードを詳しく見てみましょう。各質問の回答のパーセンテージを求めているのはリスト2の(7)の部分です。round( )は小数点以下の桁数を丸めるPHPの関数で,ここでは第2引数に1を指定しているので,小数点以下1桁まで丸めを行っています*7。続く(8)では,PHPのnumber_format関数を使って,小数点以下の桁数を1桁にそろえています。ただしこれは,number_format関数のやや特殊な使い方です。number_format関数の主たる目的は,3桁ごとにカンマを入れることなので「こんな利用法もあるんだな」と覚えておけばいいでしょう*8



金宏和實(かねひろ・かずみ)氏

株式会社イーザー代表取締役副社長。
富山県高岡市在住。