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

标签 php mysql sql database rank

我有一个查询根据学生的平均分对他们进行排名,这个 mysql 查询在查询整个类(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

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

如何更改查询,以便在查询学生时显示他/她在整个类(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

关于php - 正确列出学生成绩在数据库中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43482908/

相关文章:

php - 如何按小时拆分记录以便将它们显示为图表?

php - AJAX 没有显示来自服务器请求的数据

php - mysqli_fetch_row() 访问sql数据库中的特定行

python - 无法使用Python连接Mysql

sql - 如何使用 sql 在 h2 中插入几何图形

php - Mysql REGEX 匹配查询

php - 禁用 symfony 缓存/appDevDebugProjectContainer.php 怪物

javascript - JS在表单提交之前输出所有检查的输入字段值

MYSQL查询左连接显示一个表中的所有数据

mysql - 查询返回每行的最大数字