2013-01-14 111 views
4

我有一個marksheet表所示:mysql的獲取與等級過濾器

 
ID STUDENT_ID Branch_id Class_id Exam_id Subject_id Numbers  Date 
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 

我需要知道學生的排名,如果排名在一個或多個學生相等。並使用branc和class id進行過濾。

任何人都可以幫助我嗎?

+2

你是什麼意思 「如果秩一個或多個學生平等」?按排名,你的意思是ID?或者按「數字」列排名?如果任何兩名學生的成績相同,你只想得到結果嗎? – Verdagon

+0

是的,如果兩個學生的分數相等,我想知道結果。如果兩名學生在總共600分中得到600分,這意味着他們都處於第一名。並且該位置取決於數字列的總和。 – Zia

回答

2

試試這個:

SELECT STUDENT_ID, Numbers, IF(@marks=(@marks:=Numbers), @auto, @auto:[email protected]+1) rank 
FROM (SELECT STUDENT_ID, Branch_id, Class_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 
WHERE Branch_id = 5 AND Class_id = 1; 
0
select sum(Numbers),STUDENT_ID,Branch_id, Class_id 
from marksheet 
where Branch_id='value' and Class_id='valueClass' 
group by STUDENT_ID,Branch_id, Class_id 
order by sum(Numbers) desc 

小提琴演示here

+0

@zia你對這個查詢有什麼麻煩?那麼你可以把這個評論,而不是編輯我的答案。因爲否則其他用戶可能會與答案 – DevT

+0

混淆確定抱歉編輯,但我沒有得到答案,當兩個學生相同的分數。 – Zia

+1

@ zia-我已修改fiidle的答案 - 請檢查它在這裏... http://sqlfiddle.com/#!2/b4c39/1根據它工作正常。如果不是你想要的是什麼樣的東西? – DevT