2010-11-12 4 views
1

Три таблицы: Пользователь, Вопрос и ОтветПомощь по СЛОЖНЫМ MySQL Query

Таблица Ответ имеет столбцы: AnswerID, UserID, QuestionID и Score.

пользователь может отправить ответ на вопрос не один раз. Но при ранжировании только самого высокого балла, который он заработал на вопросе, следует учитывать.

Теперь мне нужно получить ранг (UserID, total points). Как написать запрос?

Спасибо!

ответ

0

Я не уверен в полном контексте вашего запроса, но что-то, как это должно помочь:

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

EDIT

основе OP комментарию, запрос должен быть больше, как это:

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

Чтобы быть честным, я не уверен, если подзапрос 100% правильно, так что вы не можете получить точный результат, который вы хотите, но основной для м. это правильно.

+1

Я думаю, что он хочет сумму Maxs для каждого вопрос –

+0

г вы правы, я буду править –

+0

мне нужно что-то вроде: выберите сумму (макс (оценка)), UserID из .... групп по UserID, ProblemID – lonelyloner

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

Коррелированный подзапрос <=> performance hog – Mchl

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, это был бы путь –

+0

Ранг отсутствует на этом .. – Vishal

Смежные вопросы