programing

MySQL - 여러 테이블의 관련 행 수

shortcode 2022. 10. 25. 20:17
반응형

MySQL - 여러 테이블의 관련 행 수

'퀴즈 앱'을 만들고 있습니다.각 퀴즈에는 여러 문제(퀴즈 컴포넌트)가 있으며, 각 문제에는 참가자가 선택할 수 있는 여러 정답 옵션(퀴즈 컴포넌트 옵션)이 있습니다.정답은 퀴즈 결과 표에 저장됩니다.테이블은 다음과 같습니다.

  • 퀴즈(퀴즈ID, 퀴즈타이틀);
  • 퀴즈 컴포넌트(컴포넌트 ID, 퀴즈 ID, 퀴즈 질문);
  • Quiz Component Options ( optionId, componentId, optionValue );
  • 퀴즈 결과(resultId, personId, answerOptionId, componentId);
  • Correct Options ( componentId , optionId );

각 퀴즈의 전체 퀴즈 목록과 총 구성 요소 수, 그리고 주어진 개인 ID에 대한 각 퀴즈의 정답/오답 수를 알고 싶습니다.예를 들어 다음과 같습니다.

quizTitle   total_quiz_components   correct_answers     incorrect_answers   
"Quiz 1"            3                       2                   1
"Quiz 2"            10                      1                   9

다음 쿼리는 퀴즈의 모든 행과 모든 퀴즈에 포함된 총 퀴즈 구성 요소 수를 제공합니다.

SELECT q.quizTitle, count(qc.componentId) AS total_quiz_components FROM Quiz q
    LEFT JOIN QuizComponents qc ON qc.quizId=q.quizId
        GROUP BY q.quizId;

하지만 난 이 관계에서 광기에 빠졌어

필요.case based aggregation정답과 오답을 맞힐 수 있습니다.

SELECT q.quizTitle, 
       count(qc.componentId) AS total_quiz_components ,
       sum ( case when CO.optionId = QR.answerOptionId then 1 else 0 end) as correct_answers,
       sum ( case when CO.optionId <> QR.answerOptionId then 1 else 0 end) as incorrect_answers,
FROM Quiz q
LEFT JOIN QuizComponents qc ON qc.quizId=q.quizId
LEFT JOIN QuizResults QR on 
QR.componentId = QC.componentId
LEFT JOIN CorrectOptions CO
on CO.componentId = QR.componentId
GROUP BY q.quizTitle;

언급URL : https://stackoverflow.com/questions/27135509/mysql-count-number-of-relating-rows-over-multiple-tables

반응형