MySQL如何对一名学生的科目成绩进行排名/位置

标签 mysql sql database

所以我有一个名为 MARKS 的表,我有这些列

STUDENT_ID, CLASSFORM_NAME, ACADEMIC_YEAR, TERM,  SUBJECT_NAME, TOTAL_MARKS

所以我想根据某个特定学生的科目名称、类(class)名称、学期和学术年份选择总分排名

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

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 = ?;

关于MySQL如何对一名学生的科目成绩进行排名/位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52085289/

相关文章:

mysql - 改变查询结果

基于用户ID跨4个表的MySQL SUM

sql - 按别名分组

mysql 其中日期是现在+ 2 周之前

mysql - 如果我将 "UNIQUE"约束应用于列,数据库引擎是否会遍历整个表从而影响性能?

php - mysql 数据库连接

mysql - 使用外键,但在 MySQL 查询期间显示另一列(不是 id)

mysql - 如何在不获取 maxBooleanClause 异常的情况下查询具有 98,000 个 id 的 SOLR

php - Laravel View 不工作

mysql - 如何将两个 FK 从一个表连接到另一个表?