【问题标题】:mysql count result status correct and group by user idmysql计数结果状态正确并按用户ID分组
【发布时间】:2014-08-04 19:06:47
【问题描述】:

我做了一个查询,其中将预定义答案表中的结果与用户为多个问题输入的答案进行比较。现在的问题是我想获得每个用户的总分(我可以根据状态正确计算)。以下查询为我提供了所有用户数据,每个问题的答案状态是否正确。

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,以便我可以获得正确答案的总数。

【问题讨论】:

  • 考虑提供适当的 DDL(和/或 sqlfiddle)以及所需的结果集

标签: mysql group-by aggregate-functions


【解决方案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

【讨论】:

  • 感谢您的指导。我确实很难解决这个问题。感谢您帮助我学习解决此类查询问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-30
  • 1970-01-01
  • 2014-07-03
  • 2011-02-12
  • 1970-01-01
  • 2012-08-16
  • 1970-01-01
相关资源
最近更新 更多