2014-06-14 4 views
0

J'ai fait une requête dans laquelle il y a des résultats comparés d'une table de réponses prédéfinie aux réponses qu'un utilisateur entre pour plusieurs questions. Le problème est maintenant que je veux obtenir le score total (que je peux calculer en fonction de l'état correct) de chaque utilisateur. La requête suivante me donne toutes les données des utilisateurs avec le statut de la réponse de chaque question pour être correct ou pas.mysql count résultat état correct et grouper par ID utilisateur

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 

Si j'ajoute GROUP BY user_id à la fin il regroupe également le résultat de user_id Mais comment comptez le nombre de statut correct afin que je puisse obtenir le nombre total de réponses correctes compte.

+0

Envisager de fournir DDLs appropriés (et/ou un sqlfiddle) ENSEMBLE AVEC LE RESULTAT SOUHAITE SET – Strawberry

Répondre

1

Tout d'abord, vous utilisez abusivement et vous proposez d'abuser, GROUP BY. Lorsque vous l'utilisez correctement, chaque colonne de votre jeu de résultats est également mentionnée dans la clause GROUP BY ou est une colonne agrégée. S'il vous plaît lire sur GROUP BY et l'utiliser correctement ou vous aurez du mal à résoudre vos questions. Deuxièmement, vous pouvez placer votre requête dans une requête d'agrégat externe et faire le résumé. Ce genre de chose devrait fonctionner, tant que la question dans votre question fonctionne.

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

Merci pour vos conseils. J'ai eu du mal à résoudre ce problème. Merci de m'avoir aidé à résoudre ces problèmes. – user1001176