【问题标题】:MySQL how to rank marks/ position of subject marks of one studentMySQL如何对一名学生的科目分数进行排名/位置
【发布时间】:2018-08-29 20:03:35
【问题描述】:

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

STUDENT_ID, CLASSFORM_NAME, ACADEMIC_YEAR, TERM,  SUBJECT_NAME, TOTAL_MARKS

所以我想根据某个特定学生的 subject_name、classform_name、term 和 Academic_year 来选择总分排名

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

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

帮帮我。谢谢。

【问题讨论】:

  • 好的。我会试试的。谢谢。

标签: mysql sql database


【解决方案1】:

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

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 作为 DBMS
  • 它在 where 子句中显示未知列 'student_id'
  • 我已经通过添加 student_id 对其进行了修改但是输出不是我想要的,它显示的位置为 1,即使有其他更大的分数而不是这个特定学生的主题标记自己... ......
  • 现在似乎可以工作了....将加载更多数据并进一步测试...非常感谢。你真的为我节省了很多时间
  • 请问我如何让它考虑关系,因为它不考虑关系。
猜你喜欢
  • 1970-01-01
  • 2014-10-08
  • 2017-11-24
  • 1970-01-01
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多