私はこれに似たいくつかのテーブルを持っています
User : id , username
answers : id , answers , is_correct , question_id
user_answers : user_id , question_id , answer_id , date
questions : id , question , category
category : id name
今私がやろうとしているのは、ユーザーが各カテゴリーで与えた正解を数えることです。私の質問はこれです
SELECT
u.`user_name` AS `UserName`,
u.`user_id` AS `UserId`,
sum(a.is_correct) AS `Score`,
group_concat(distinct c.name) AS `Quizes`
FROM users_answers ua
LEFT JOIN answers a
on a.id = ua.answer_id
LEFT JOIN users u
ON u.user_id = ua.user_id
left join questions q
on q.id = a.question_id
left join categories c
on c.id = q.cat_id
WHERE a.is_correct = 1
GROUP BY u.user_id
ORDER BY `Score` desc, ua.date desc;
結果は大丈夫ですが、カテゴリごとに個別に合計スコアを取得する必要があります。
編集
select
s.UserName,
s.UserId,
GROUP_CONCAT(Score) AS CategoryScores,
sum(s.TotalScore) as TotalScore,
s.Quizes,
s.LastPlayed
from (select
u.`user_name` AS `UserName`,
u.`user_id` AS `UserId`,
sum(a.is_correct) AS `Score`,
sum(a.is_correct) AS `TotalScore`,
group_concat(distinct c.name) AS `Quizes`,
ua.date as `LastPlayed`,
c.id as CategoryId
FROM users_answers ua
LEFT JOIN answers a
on a.id = ua.answer_id
LEFT JOIN users u
ON u.user_id = ua.user_id
left join questions q
on q.id = a.question_id
left join categories c
on c.id = q.cat_id
WHERE a.is_correct = 1
GROUP BY u.user_id, CategoryId) s
GROUP BY UserId
ORDER BY `TotalScore` desc, LastPlayed desc;
Michaelに感謝しますが、ここでの問題は、グループconcatでカテゴリ名を取得できないことです。