次のクエリ (教育アプリ用) は、特定のドリルでのユーザーのスコアを計算します。ユーザー、ドリル、質問、回答の 4 つのテーブルで動作します。各質問はドリルに属し、各回答は質問とユーザーに属します (回答はユーザーと質問に固有です)。質問は多肢選択式で、answer.selectedChoice = 1 の場合は正解です。ユーザーのドリルのスコアは、そのドリルの最新の 5 つの回答に基づいており、正解に割り当てられた重みは、回答の速さに基づいてスケーリングされます。
特定のドリルでユーザーのスコアを取得するだけでなく、ユーザーが少なくとも 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