いくつかの条件に基づいてフィールドのカウントを取得しようとしています。しかし、私はまだ望みの結果を達成することはできません。MySQLでケースを使用して特定のフィールドの数を取得する方法
表::クイズの質問:
qq_id | qq_type | qq_title
----------------------------------------------------
1 | 1 | This is a multiple choice question
2 | 2 | This is a single choice question
3 | 4 | This is a descriptive type question
表::クイズ質問の詳細:
qqd_id | qqd_question_id | qqd_option_text | qqd_option_is_answer
-----------------------------------------------------------------
1 | 1 | Yes | 1
2 | 1 | No | 2
3 | 1 | May Be | 1
4 | 2 | Yes | 1
5 | 2 | No | 2
表::クイズ参加者の回答:
qa_id | qa_quiz_id| qa_participant_id | qa_question_id | qa_answer**
-------------------------------------------------------------------------------
1 | 1 | 3 | 1 | 1
2 | 1 | 3 | 1 | 3
3 | 1 | 3 | 2 | 4
4 | 1 | 3 | 3 | null
**フィールドqa_answerは、クイズの質問の詳細テーブルのqqd_idです。
質問(qq_id = 1)は多項選択問題ですので、1つ以上の回答があります。 質問(qq_id = 2)には回答が1つしかなく、質問(qq_id = 3)は説明的な質問になります。管理者によって定義された
答えは質問の詳細テーブルに格納されている、我々はqqd_question_id = 1は、それらの2が(qqd_id 1 & 3)
正解数と合計の計算が正しいされた3つの答えを持って見ることができます(QQ_id = 1は1つの質問ですが複数の回答があるため)3と答えています(これは間違っていて、2と予想されます)。正しい)。
私はlaravel 5.4フレームワークを使用しています。私は次のクエリでクエリをテストしています。
注:テスト目的のために、テーブルに追加フィールド(qa_is_correct_answer)を追加しました(詳細テーブルとの結合なし)。無視してください。
DB::table('quiz_answers AS QA')
->select(DB::Raw('QA.*, SUM(QA.qa_is_correct_answer = 1) AS correct, COUNT(DISTINCT QA.qa_question_id) AS total_answered'))
->where('QA.qa_quiz_id',$quizID)
->where('QA.qa_participant_id',$participantID)
->groupBy('QA.qa_quiz_id')
->get();
SQLフィドル:http://sqlfiddle.com/#!9/ba1650/3
あなたのデータに完全に従っているわけではありませんが、グループを実行中に「QA。*」を選択すると無効となります。 –
希望の結果が表示されません。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry
@Strawberry私はSQLのフィドル – Shan