2010-11-12 82 views
1

三個表:用戶問題回答幫助在複雜的MySQL查詢

表答了列:AnswerID,用戶名,QuestionID和分數。

用戶可以多次提交問題的回答。但是,如果僅將他在這個問題上獲得的最高分數排在第一位,

現在我需要獲得排名(UserID,總積分)。如何編寫查詢?

謝謝!

回答

0

我不知道您的查詢的全部範圍內的,但這樣的事情應該有所幫助:

SELECT QuestionID, UserID, MAX(Score) FROM Answer GROUP BY UserID, QuestionID 

編輯

基於OP評論,查詢應該更多這樣的:

SELECT UserID, SUM(SELECT Max(Score) FROM Answer GROUP BY UserID, QuestionID) AS TotalScore GROUP BY UserID 

說實話,我不知道,如果查詢是100%正確的,所以你可能無法得到你想要的確切結果,但基本的米是正確的。

+1

我認爲他想的MAXS的每個問題 – 2010-11-12 17:51:19

+0

GAH你的總和好吧,我會編輯 – 2010-11-12 17:53:49

+0

我需要這樣的東西:SELECT SUM(MAX(分數)),用戶名從組....通過UserID,問題ID – lonelyloner 2010-11-12 17:54:12

0

但僅排名最高 得分,他賺取的問題時,應 計算。

在此基礎上我的理解是,你希望每個問題的最高得分爲每一位用戶,然後對他們進行排名

SET @rank=0; 
    SELECT 
      UserId, 
      Sum(Points) as TotalPoints, 
      Rank 
     FROM 
(
     SELECT UserID,MAX(Score) as Points,(@rank:[email protected]+1) as Rank from Answer 
     group by UserID,questionId 
     order by Points 
) as d1 
group by d1.UserId 
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 
+0

相關子查詢<=>表現豬 – Mchl 2010-11-12 17:57:39

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 
+0

+1,這將是要走的路 – 2010-11-12 17:59:25

+0

排名在此缺失.. – Vishal 2010-11-12 18:10:01