2017-04-18 33 views
1

我有一個查詢根據他們的平均數定位學生,這個mysql查詢在查詢整個班級的位置時工作得很好。但是,例如,當我想爲某個特定學生提供某個職位時,即使列表中的學生未處於位置,該查詢也會對該職位排名。正確列出數據庫中學生分數的位置

查詢整個班級時,下面是查詢。這裏效果很好。

SELECT (@rownum := @rownum + 1) AS rank, student_id, 
    student_name,term_1_avg 
    FROM `students` a CROSS JOIN 
    (SELECT @rownum := 0) params 
    WHERE class = 2 
    ORDER BY term_1_avg DESC 

但是,當查詢是這樣

SELECT (@rownum := @rownum + 1) AS rank, student_id, 
    student_name,term_1_avg 
    FROM `students` a CROSS JOIN 
    (SELECT @rownum := 0) params 
    WHERE class = 2 and student_id=2013494 
    ORDER BY term_1_avg DESC 

它的排名將學號1,即使該學生沒有位置的一個。

如何更改查詢,以便在查詢學生時顯示他/她在整個班級中的位置。

回答

1

你的排名是由查詢完成,所以你應該讓查詢,因爲它並使用它作爲一個子查詢

SELECT * FROM 
(SELECT 
    (@rownum := @rownum + 1) AS rank, 
    student_id, 
    student_name, 
    term_1_avg 
FROM `students` a 
CROSS JOIN (SELECT @rownum := 0) params 
WHERE class = 2 
ORDER BY term_1_avg DESC) as sub 
WHERE sub.student_id=2013494 
0

也許這:

Select * 
from (SELECT (@rownum := @rownum + 1) AS rank, student_id, 
     student_name,term_1_avg 
     FROM `students` a CROSS JOIN 
     (SELECT @rownum := 0) params 
     WHERE class = 2 
     ORDER BY term_1_avg DESC) 
where student_id=2013494