環境は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
No.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でいいのか、表示さえしないのか・・・
No.1
- 回答日時:
パーセント表示させるようなので、正解率は小数点以下切捨てにしています
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
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
SQLにて特定の文字を除いた検索...
-
SQLサーバから、項目の属性(型...
-
SQL Left Join で重複を排除す...
-
エクセルの関数について教えて...
-
Updateの複数テーブル条件時のL...
-
sqlで、600行あるテーブルを100...
-
[MySQL] UNIQUE制約の値を更新...
-
1テーブル&複数レコードの更新...
-
副問合せの書き方について
-
insertを高速化させたい
-
スクリーンセイバー
-
VIEWの元のテーブルのindexって...
-
マイクラPC版のコマンドで効率...
-
単純なクエリーなのにSELECTし...
-
ソート順の一番若い者を取得する
-
MySQL SELECT句でサブクエリで...
-
SQLServer2000 SQL文について
-
フィールド名を変数で指定するには
-
”photo id” とは何ぞや?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで最後の文字だけ置き...
-
エクセルの関数について教えて...
-
VIEWの元のテーブルのindexって...
-
副問合せの書き方について
-
select文のwhere句に配列を入れ...
-
マイクラPC版のコマンドで効率...
-
SQLサーバから、項目の属性(型...
-
エラー 1068 (42000): 複数の主...
-
[MySQL] 3つのテーブルの結合で...
-
Access パラメータクエリをcsv...
-
SQLにて特定の文字を除いた検索...
-
SQL Left Join で重複を排除す...
-
ストアドのエラーについて
-
Unionした最後にGROUP BYを追加...
-
バインド変数について
-
PL/SQLの変数について
-
sqlで、600行あるテーブルを100...
-
WordpressのContact form 7でzi...
-
selectした大量データをinsert...
-
inner joinをすると数がおかし...
おすすめ情報