2016-05-21 3 views
1

Я пишу следующую команду MySQL, чтобы получить сумму баллов для студентов и ранжировать их соответственно.Как получить ранг конкретного пользователя на основе суммирования баллов?

SELECT student_id, thescore, @rownum:[email protected] + 1 AS rankstudent 
FROM 
(
    SELECT student_id, SUM(score) AS thescore 
    FROM school_ranking 
    WHERE school like '%Standard6%' and student_id <> '' 
    GROUP BY student_id 
    ORDER BY thescore DESC 

) Sub1 
CROSS JOIN (SELECT @rownum:=0) Sub2 

Ниже приводится результат:

student_id thescore rankstudent 
J007766  5739   1 
J007625  5159   2 
J007629  5158   3 
J007713  4460   4 
J007690  4384   5 

Мой вопрос заключается в том, чтобы получить звание для конкретного студента? Например, как получить звание ученика с идентификатором «J007625»?

ответ

0
SELECT rankstudent FROM (
SELECT student_id, thescore, @rownum:[email protected] + 1 AS rankstudent 
FROM 
(
    SELECT student_id, SUM(score) AS thescore 
    FROM school_ranking 
    WHERE school like '%Standard6%' and student_id <> '' 
    GROUP BY student_id 
    ORDER BY thescore DESC 

) Sub1 
CROSS JOIN (SELECT @rownum:=0) Sub2 
) Sub3 
WHERE `Sub3`.`student_id` = "J007625" 
+0

я выполнить команду и получить rankstudent = 1. J007625 находится на втором месте, и ответ должен быть rankstudent = 2. –

+0

@ босса-центральный редактировал запрос. Попробуй это. – Wistar

+0

Wistar, код работает отлично, и дает правильный рейтинг. Отличная работа! Большое вам спасибо за вклад и помощь. –

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