Динамический получить рейтинг по Mysql Query

У меня есть таблица результатов, как:

ID STUDENT_ID Branch_id Class_id Exam_id Subject_id Номера Дата
1       653         5           1           1   8               60      2012-01-01
2       653         5           1           1   9               40      2012-01-01
3       653         5           1           1   10              80      2012-01-01
4       653         5           1           1   11              50      2012-01-01
5       653         5           1           1   12              65      2012-01-01
6       653         5           1           1   13              33      2012-01-01
7       653         5           1           1   15              86      2012-01-01
8       222         5           1           1   8               100     2012-01-01
9       222         5           1           1   9               80      2012-01-01
10      222         5           1           1   10              92      2012-01-01
11      222         5           1           1   11              50      2012-01-01
12      222         5           1           1   12              65      2012-01-01
13      222         5           1           1   13              33      2012-01-01
7       222         5           1           1   15              86      2012-01-01

Мой результат Желания как:

Student_ID Math English Наука Общий рейтинг
1       90  89      88  267  1
2       90  89      88  267  1
3       58  45      98  201      2

Я хочу получить студенческое звание по этому методу:

Ссылка Ссылка

SET @rank = 0, @prev_val = NULL;

SELECT rank, correct FROM 
(
    SELECT 
        @rank := IF(@prev_val=correct,@rank,@rank+1) AS rank,
        @prev_val := correct AS correct, uid
    FROM quiz_user 
    ORDER BY correct DESC
)as result WHERE uid=xxxxxxxxxxxx

Этот запрос, в чем мне нужна только разница между структурой таблицы, автор поста присваивает ранг по правильному столбцу и мне нужно присваивать ранг по номерам столбца SUM(числа) после суммы всех чисел.

Пожалуйста помоги.

1 ответ

Решение

Попробуй это:

SELECT STUDENT_ID, Numbers, IF(@marks=(@marks:=Numbers), @auto, @auto:=@auto+1) rank 
FROM (SELECT STUDENT_ID, SUM(Numbers) Numbers
      FROM quiz_user 
      GROUP BY STUDENT_ID 
      ORDER BY Numbers DESC, STUDENT_ID 
     ) AS A, (SELECT @auto:=0, @marks:=0) AS B;
Другие вопросы по тегам