2013-07-30 62 views
0

我想通過學生的id選擇表中學生的排名。下面的代碼將有助於解釋我的問題。 表的名字是Student,它有id並且標記爲它的列。上述在mysql中通過id獲得排名

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'但我想選擇通過其ID每個學生的排名。 我已經嘗試了上面的代碼,以解決我的問題,但無濟於事,請能有人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

你能從'Student'表中顯示幾行,加上預期的輸出嗎? –

+0

請讓我更新我的問題,希望這會有所幫助。謝謝 – George

+0

只有在我看到的情況下,這隻能用臨時表格。您首先必須將等級列計算到臨時表中,然後選擇單個學生。縮小結果的地方將省略其他等級。 –

回答

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:很高興能幫到你。 –