帮助解决复杂的MySQL查询问题

时间:2010-11-12 17:44:01

标签: mysql

三个表:用户问题答案

表答案包含以下列:AnswerID,UserID,QuestionID和Score。

用户可以多次提交问题的答案。但是,如果只计算他在问题上获得的最高分数,则应计算在内。

现在我需要获得排名(UserID,总分)。如何编写查询?

谢谢!

4 个答案:

答案 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