MySQL如何对一名学生的分数/学科分数排名

MySQL如何对一名学生的分数/学科分数排名,mysql,sql,database,Mysql,Sql,Database,所以我有一个叫做MARKS的表,我有这些列 STUDENT_ID, CLASSFORM_NAME, ACADEMIC_YEAR, TERM, SUBJECT_NAME, TOTAL_MARKS 因此,我想根据一个特定学生的学科名称、课程形式名称、学期和学年来选择总分的排名 这是我使用过但不起作用的查询 SELECT * FROM (SELECT total_marks, @curRank := @curRank + 1 AS scorePosition FROM marks m,

所以我有一个叫做MARKS的表,我有这些列

STUDENT_ID, CLASSFORM_NAME, ACADEMIC_YEAR, TERM,  SUBJECT_NAME, TOTAL_MARKS
因此,我想根据一个特定学生的学科名称、课程形式名称、学期和学年来选择总分的排名

这是我使用过但不起作用的查询

SELECT *
FROM (SELECT total_marks, @curRank := @curRank + 1 AS scorePosition
      FROM marks m, (SELECT @curRank := 0) q
      WHERE classform_name=? AND term=? AND academic_year=? AND subject_name=?
     ) t
WHERE student_id =?
ORDER BY total_marks DESC
帮帮我。谢谢。

在分配排名之前,您需要对数据进行排序。为了安全起见,请使用子查询:

SELECT m.*
FROM (SELECT m.*, @curRank := @curRank + 1 AS scorePosition
      FROM (SELECT m.*
            FROM marks m
            WHERE classform_name = ? AND term = ? AND academic_year = ? AND subject_name = ?
            ORDER BY total_marks DESC
           ) m CROSS JOIN
           (SELECT @curRank := 0) q
     ) m
WHERE m.student_id = ?;

好啊我试试看。谢谢,还是没用。同样的错误。正在尝试获取非对象的属性“erro”。这意味着查询甚至无法正常运行。我使用mySQL作为DBMSIt,上面说的是未知列“student_id”,clauseI在其中添加了student_id对其进行了修改,但输出不是我想要的,它将位置显示为1,即使还有比这个学生的主题标记更大的标记…………现在似乎正在工作。。。。将加载更多数据并进一步测试。。。非常感谢。你真的救了我很多时间,我该怎么做它的关系,因为它不考虑纽带。