2013-07-30 5 views
0

Я пытаюсь выбрать ранг студента в таблице по идентификатору студента. Код ниже поможет объяснить мою проблему. Имя таблицы - Student, в ней есть идентификаторы и метки.Получение ранга по id в mysql

SELECT id, marks, 
    @curRank := IF(@prevVal=marks,@curRank,@studentNumber) AS rank,  
    @studentNumber := @studentNumber + 1 as studentNumber, 
    @prevVal:=marks 
FROM Student,(SELECT @curRank :=0, @prevVal:=null, @studentNumber:=1) r 
ORDER BY marks DESC where id='001'; 

Код выше может выбрать весь список ID студента и их ранга без where id='001', но я хочу, чтобы выбрать каждый студент ранг по его идентификатору. Я попытался выше коды, чтобы исправить мою проблему, но безрезультатно, пожалуйста, может кто-нибудь help.This как моя таблица выглядит, когда я выполнить приведенный выше код без where id='001'

id  marks  rank 
    002  92   1 
    003  92   1 
    001  80   3 

Я хочу, чтобы выбрать метки и ранг, где ID = 001, как на выходе ниже

id  marks  rank 
001   80   3 
+3

Не могли бы вы отобразить несколько строк из таблицы «Студент» плюс ожидаемый результат? –

+0

Пожалуйста, у меня есть обновленный вопрос, надеюсь, что это поможет. Спасибо – George

+0

Это будет возможно только с временными таблицами, насколько я могу видеть. Сначала вам нужно вычислить столбец рангов в таблице temp, а затем выбрать одного студента. Сужение результата с помощью где в противном случае опускает ранг. –

ответ

1

Выполните сортировку и вычисление ранга внутри подзапроса, а затем сделать выбор ID вне подзапроса - например, так:

select id, marks, rank from 
(SELECT id, marks, 
    @curRank := IF(@prevVal=marks,@curRank,@studentNumber) AS rank,  
    @studentNumber := @studentNumber + 1 as studentNumber, 
    @prevVal:=marks 
FROM student,(SELECT @curRank :=0, @prevVal:=null, @studentNumber:=1) r 
ORDER BY marks DESC) sq 
where id='001' 

SQLFiddle here.

+0

Спасибо, что работает, я понял, где я нахожусь не так. – George

+0

@George: Рад, что я мог бы помочь. –

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