表題の通りなのですが、Laravel6.3にて開発中のサイトのSQLの組み立てとクエリビルダを構築するのに詰まってしまい、手が止まってしまいました。
抽出したい条件は、質問に対する回答結果を格納しており、回答が10件以上付いている質問の正解率(正解数/回答数)を抽出しし、最終的に正解率順にソートしたいと考えています。
簡易ですがテーブル状況は以下です。
・質問テーブル (questions)
id int
・回答結果テーブル (results)
id int
question_id int (外部キー参照制約)
result tinyint (0か1)
回答が10件以上付いている質問を抽出するEloquentクエリビルダは下記の通りです。
php
1Question::has('results', '>=', 10)->get();
これで以下のSQLが生成されます。
sql
1select * 2from `questions` 3where ( 4 select count(*) 5 from `results` 6 where `questions`.`id` = `results`.`question_id` 7) >= 10 8and `questions`.`deleted_at` is null
この絞り込まれた質問毎の正解率(正解数/回答数)を求める方法に詰まっております。
まずSQLで考えると、以下のようなサブクエリになるような気がするのですが、どうも構築がうまくいきません。
sql
1SELECT 2*,( 3(select count(*) from `results` where `questions`.`id` = `results`.`question_id` AND `results`.`result` = 1) AS CORRECT 4/ 5(select count(*) from `results` where `questions`.`id` = `results`.`question_id`) AS TOTAL 6) AS ACCURACY_RATE 7from questions;
クエリビルダのメソッドのみで構築出来るのか、もしくはselectRaw()
(DB::raw()
)を使う必要があるのか。
最終的には抽出した正解率をasc
もしくはdesc
でソートしたいとも考えています。
お詳しい方がおられましたら、御教示頂けると幸いでございます。
どうぞ宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/10/17 08:28 編集
2019/10/17 08:47
2019/10/17 08:48
2019/10/17 13:00