三个表:用户,问题和答案
表答案包含以下列:AnswerID,UserID,QuestionID和Score。
用户可以多次提交问题的答案。但是,如果只计算他在问题上获得的最高分数,则应计算在内。
现在我需要获得排名(UserID,总分)。如何编写查询?
谢谢!
答案 0 :(得分:1)
首先选择得分最高的答案,然后计算总分数。
SELECT
UserID, SUM(Score) AS TotalPoints
FROM (
SELECT
UserID, QuestionID, MAX(Score) AS Score
FROM
Answer
GROUP BY
UserID, QuestionID
) AS sq
GROUP BY
UserId
答案 1 :(得分:0)
我不确定查询的完整上下文,但是这样的内容应该会有所帮助:
SELECT QuestionID, UserID, MAX(Score) FROM Answer GROUP BY UserID, QuestionID
修改强>
根据OP Comment,查询应该更像是这样:
SELECT UserID, SUM(SELECT Max(Score) FROM Answer GROUP BY UserID, QuestionID) AS TotalScore GROUP BY UserID
说实话,我不确定子查询是否100%正确,因此您可能无法得到您想要的确切结果,但它的基本形式是正确的。
答案 2 :(得分:0)
但排名时只有最高排名 他应该在问题上获得的分数 被计算在内。
基于此,我理解的是,您希望每个用户的每个问题的最高分数,然后对它们进行排名
SET @rank=0;
SELECT
UserId,
Sum(Points) as TotalPoints,
Rank
FROM
(
SELECT UserID,MAX(Score) as Points,(@rank:=@rank+1) as Rank from Answer
group by UserID,questionId
order by Points
) as d1
group by d1.UserId
答案 3 :(得分:0)
如何使用这样的子查询:
SELECT UserId, SUM(
SELECT MAX(SCORE) FROM Answer a
WHERE a.uestionId = q.questionId)
FROM Question q
WHERE q.userId = 1234
Group by userid