2010-11-12 7 views
1

Trois Complicated Tables: utilisateur, Question et RéponseAide sur un MySQL Query

Table réponse a colonnes: AnswerID, UserID, QuestionID et Score.

un utilisateur peut soumettre une réponse à une question plus d'une fois. Mais en classant seulement le meilleur score qu'il a gagné sur la question devrait être compté.

Maintenant j'ai besoin d'obtenir le rang (UserID, total de points). Comment écrire la requête?

Merci!

Répondre

0

Je ne suis pas sûr du tout le contexte de votre requête, mais quelque chose comme cela devrait aider:

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

EDIT

Basé sur OP Commentaire, requête devrait être plus comme ceci:

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

pour être honnête, je ne sais pas si la sous-requête est 100% correct si vous ne pourriez pas obtenir le résultat exact que vous voulez, mais la base pour m en est juste.

+1

Je pense qu'il veut la somme des maxs pour chaque question –

+0

Gah vous avez raison, je vais modifier –

+0

je besoin de quelque chose comme: select sum (max (score)), UserID de .... groupe par UserID, ProblemID – lonelyloner

0

Mais lorsque le classement le plus élevé que note qu'il a gagné sur la question devrait être pris en compte.

Sur la base de ce que je comprends est que vous voulez la note maximale de chaque question pour chaque utilisateur, puis de les classer

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

Qu'en est-il en utilisant un comme sous requête ceci:

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

Sous-requête corrélée <=> performance hog – Mchl

1

Sélectionnez d'abord les réponses les mieux notées, puis calculez le nombre total de points.

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, ce serait le chemin à parcourir –

+0

Le rang est manquant .. – Vishal