2017-12-23 27 views
0

일부 조건에 따라 필드 수를 얻으려고합니다. 그러나 나는 아직 원하는 결과를 얻을 수 없다.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)은 단 하나의 대답을 가지며 질문 (qq_id = 3)은 설명적인 질문입니다. 관리자에 의해 정의 된

답변이 질문의 세부 사항 테이블에 저장됩니다, 우리는 qqd_question_id = 1 중 2 (qqd_id 1 & 3)

정답 수와 합계를 계산 올바른지하는 3 개 답변을 가지고 볼 수 있습니다 (Qq_id = 1은 하나의 질문이지만 여러 개의 답을 가지고 있기 때문에) 총 정답은 3 (잘못된 것이며 예상은 2 임)이고 총 응답 수는 3입니다. 옳은).

저는 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

+1

전적으로 귀하의 데이터를 따르지는 않지만 그룹을 수행하는 동안 '품질 보증. *'을 선택하면 유효하지 않다고 말합니다. –

+0

원하는 결과를 볼 수 없습니다. 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

+0

@Strawberry 나는 SQL 바이블에 대한 링크로 질문을 업데이트했다. – Shan

답변

1

나는 당신이 필요로하는 Laravel로 번역하는 것이 아니라 별도의 정답과 같은 객관식 질문에 대한 모든 답을 계산에서 유지하는 방법을 모른다 하위 쿼리에서 함께 그룹화 할 수 있습니다.

DEMO

SELECT qa.*, SUM(qa.correct = 1) AS correct, COUNT(*) AS total_answered 
FROM (
    SELECT qa.*, MIN(qa_is_correct_answer) AS correct 
    FROM quiz_answers AS qa 
    GROUP BY qa_quiz_id, qa_question_id 
) AS qa 
GROUP BY qa.qa_quiz_id 

은 BTW, 그것은 잘못된 보정에 대한 12를 사용하는 것이 꽤 이상한입니다. 이진 옵션의 경우 일반적으로 01을 사용하고 1을 true 값으로 사용합니다.

+0

고마워, 정확히 내가 무엇을 찾고 있었는지 !! . 나는 정확하고 부정확 한 각각을 위해 값 1과 2를 사용하는 것이 꽤 이상하다는 것을 안다;). 하지만이 방법을 사용해야합니다. – Shan