我有一个查询根据他们的平均值定位学生,这个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位。
如何更改查询,以便在查询学生时,它显示他/她在整个班级中的位置。
答案 0 :(得分: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
答案 1 :(得分: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