以下查询(针对教育应用程序)计算用户在特定练习中的得分。它适用于四个表 - 用户、钻头、问题和答案。每个问题都属于一个演练,每个答案都属于一个问题和一个用户(一个答案对于一个用户和一个问题来说是唯一的)。问题是多项选择,如果 answer.selectedChoice = 1,则答案是正确的。用户的演练分数基于该演练的最近五个答案,分配给正确答案的权重根据回答的速度进行调整。
我正在尝试弄清楚如何扩展此查询,以便不仅获取用户对特定练习的分数,还可以获得用户对他们至少回答了一个问题的每个练习的分数。我一直在研究将其重写为相关子查询,但到目前为止我的努力还不够。任何帮助将不胜感激。
SELECT data.*,
SUM(data.isCorrect * (IF(rawScore < 0, 0, IF(rawScore > 1, 1, rawScore)))) / 5 AS score
FROM
(SELECT
answer.id,
IF(answer.selectedChoice = 1, 1, 0) AS isCorrect,
(1 - (answer.timeElapsed - question.baseTime) / (4 * question.baseTime)) as rawScore
FROM
answer,
question
WHERE
answer.questionID = question.id AND
question.drillID = :drillID AND
answer.userID = :userID
ORDER BY
answer.created DESC
LIMIT
5) as data