반응형
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
반응형
'programing' 카테고리의 다른 글
기능 조기 종료? (0) | 2022.10.25 |
---|---|
구성 요소가 로드될 때 데이터를 검색하는 방법 (0) | 2022.10.25 |
열에서 URL의 일부를 제거하는 SQL 문 (0) | 2022.10.25 |
사용자가 PHP의 localhost에 있는지 어떻게 검출할 수 있습니까? (0) | 2022.10.25 |
MySQL 여러 행을 반환하는 SELECT 하위 쿼리를 사용하여 테이블에 삽입하려면 어떻게 해야 합니까? (0) | 2022.10.25 |