2017-04-18 4 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