ショボ短歌会

環境はMySQL5.5です。
学習問題ソフトを2つのテーブルで作っています。
1つ目のテーブル名はquestionsで
id, mondai, kotaeで
問題文と答えが入ってます。
2つ目のテーブル名はquestion_historiesで
id, questions_id, is_correctで
1つ問題を解くごとにquestionsのidと正解・不正解のbool値をいれていきます。

やりたいことは

「questions.id, questions.mondai, 正解率(この問題の正解数/この問題と解いた回数*100)」
を出したいと思います。
どんなSQLを書けばいいか教えてくださいm(*__)m

A 回答 (2件)

例えばこんな感じ



//5問用意
create table questions (id int not null primary key,mondai text,kotae text);
insert into questions values(1,'aaa','AAA'),(2,'bbb','BBB'),(3,'ccc','CCC'),(4,'ddd','DDD'),(5,'eee','EEE');

//is_correctは正解は1、不正解は0として、1番は3回答中1正解、2番は1回答中1正解、4番は1回答中正解なし、3番5番は回答なし

create table question_histories(id int not null primary key auto_increment, questions_id int , is_correct tinyint);
insert into question_histories(questions_id,is_correct) values(1,0),(1,0),(1,1),(2,1),(4,0);

//集計
select q.id,mondai,seitouritu
from questions as q
left join(select questions_id,sum(is_correct=1)/count(*) * 100 as seitouritu
from question_histories
group by questions_id) as h
on q.id=h.questions_id

nullをどうするか別途調整、0とみなすのか、nullでいいのか、表示さえしないのか・・・
    • good
    • 0
この回答へのお礼

できました。ありがとうございましたm(__)m

お礼日時:2015/06/01 18:28

パーセント表示させるようなので、正解率は小数点以下切捨てにしています



select Q.id, Q.mondai
, truncate(sum(case H.is_correct when true then 1 else 0 end) / sum(*) * 100) as 正解率
from questions Q
inner join question_histories H on H.questions_id = Q.id
group by Q.id, Q.mondai
    • good
    • 0

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