正确列出学生成绩在数据库中的位置

List correctly the position of student marks in database

我有一个查询根据学生的平均分对他们进行定位,这个 mysql 查询在查询整个 class 的位置时效果很好。但是,例如,当我想要一个特定学生的位置时,即使在列表中没有位置的学生,查询也会将该学生位置排在第一位。

下面是查询,查询整个class时。在这里效果很好。

    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

即使该学生不是第一名,它也会将学生排在第一位。

如何更改查询,以便在查询学生时显示位置 he/she 在整个 class.

您的排名是由查询完成的,因此您应该保持查询不变并将其用作子查询

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

也许是这样:

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