例えば

select level,correct from result where level= 2;

とすると
テン・シー・シー-fig.1
と出力されるわけで、これはresultの中のlevelが2のデータだけ表示してるんですな。
で、このlevelが2のcorrect値の中で、一番小さい値を探す場合

min(項目名)

を使います。
テン・シー・シー-fig.2
出たっすか?
一番大きい値が欲しいなら

max(項目名)

平均値なら

avg(項目名)

とやりゃいいわけです。
テン・シー・シー-fig.3

出力結果の内訳はこんな感じ。

テン・シー・シー-fig.0

 この方法で各レベルごとのcorrect値の平均値を出したければ

select level,avg(correct) from result where level = 求めるレベル;

として、level=1、level=2、level=3ごとに計算すればいいんだけど...
 ここでもう一つ便利なコマンド

group by 項目名

てのをwhere level=求めるレベルのかわりに指定してやると
テン・シー・シー-fig.4
て感じで、各レベルごとのcorrect値の平均値が求まるわけですわ。
 これは

select level,correct from result order by level;

の結果(ちなみに order by 項目名 を追記すると、その項目名でソートされて出力されるときたもんだ。)
テン・シー・シー-fig.6
から各レベル値が一致するcorrect値をグループ化して平均値を求め表示してるわけですね。

 で、いよいよ本題。
 レベルごとの完全に答えられた場合と答えられなかった場合の平均はどうやるか?
 correct値はあくまで連続正解数なんで、これだけじゃ完全に答えられたかどうか判断つかないわけっす。判断するにはlevelinfoテーブル側の連続出題数であるcomplete値にcorrect値が達しているかどうかということになるわけで、これは前回の2つのテーブルの合成と、今回の関数利用の応用になります。
 resultテーブルのcorrect値とlevelinfoテーブルのcomplete値は都合よく整数型なので、

correct/complete

と計算させると1か0になります。関数の他にこういう演算も指定できるみたいで、実際やってみると
テン・シー・シー-fig.7
て感じです。
 これは完全に答えられた場合が1、途中で間違えた場合が0と考えていいので、この結果に対しレベルごとに平均を取れば、レベルごとの成功率となるわけですな。
テン・シー・シー-fig.8

 でもって、先にcorrect値の平均を取ってからcomplete値で割った場合

avg(correct/complete) → avg(correct)/complete

は、各レベルでの回答精度の平均値となるわけですわ。
テン・シー・シー-fig.9

じゃまた。

.quit