2014-06-14 90 views
0

我做了一個查詢,其中有一個預定義的答案表與用戶輸入的多個問題的答案進行比較的結果。現在的問題是我想獲得每個用戶的總分(我可以根據狀態正確計算)。以下查詢爲我提供了每個問題答案的狀態都是正確的所有用戶數據。mysql count result status correct and group by user id

SELECT qa.question_id, qa.test_id, uta.user_answer,uta.user_id, qa.type, 
qa.answers correct_answer, 
CASE WHEN uta.user_answer = qa.answers THEN 'correct' ELSE 'incorrect' END 
AS status 
FROM questions_answer qa 
LEFT JOIN 
(
    SELECT user_id, type, test_id, question_id, 
    GROUP_CONCAT(answers ORDER BY answers) AS user_answer, 
    timestamp from user_test_answers 
    WHERE test_id = '1'  
    GROUP BY user_id, question_id 

) uta 
ON qa.question_id = uta.question_id 
where qa.test_id=1 

如果我在結尾處添加GROUP BY user_id也由user_id但如何組的結果計算所有的狀態correct,這樣我可以得到正確答案的總數計算。

+0

考慮提供適當的DDL(和/或sqlfiddle)連同所需的結果集 – Strawberry

回答

1

首先,你濫用,並建議濫用,GROUP BY。當您正確使用它時,結果集中的每一列都在GROUP BY子句中提及,或者是一個聚合列。請閱讀GROUP BY並正確使用它,否則您將難以排除您的疑問。其次,您可以將查詢包裝在外部聚合查詢中並進行彙總。只要查詢在你的問題中起作用,這種事情就應該起作用。

SELECT user_id, test_id, 
     100 * SUM(status='correct') /COUNT(status) AS percent_correct, 
     100 * SUM(status='incorrect')/COUNT(status) AS percent_incorrect 
    FROM (
      /* your entire query from your question */ 
     ) AS results 
GROUP BY user_id, test_id 
ORDER BY user_id, test_id 
+0

謝謝您的指導。我確實很難解決這個問題。感謝您幫助我學習排查這些疑問 – user1001176