【问题标题】:mysql get student rank in exammysql 获取学生在考试中的排名
【发布时间】:2017-08-27 22:43:09
【问题描述】:

我有以下问题。

SELECT 
  SUM(
    marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
  ),
  FIND_IN_SET(
    SUM(
      marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
    ),
    (SELECT 
      GROUP_CONCAT(summarks 
        ORDER BY summarks DESC) 
    FROM
      (SELECT 
        SUM(
          marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
        ) AS summarks 
      FROM
        results 
      GROUP BY student_id) sm)
  ) AS rank 
FROM
  results 
WHERE student_id = ".$student_id." 
  AND exam_year = ".$year." 
  AND exam_id = ".$exam." 
  AND results.class_id = ".$class_id." 
  AND section_id = ".$section_id." 

仅当我的结果表中有一项考试时,此查询才适用于我。 当有更多考试时,此查询会计算所有考试的分数并将排名返回给我。但是如果我只需要一个考试的学生排名,我需要将exam_id 放入查询中,当我这样做时,查询返回0 作为学生排名。

在上图中,我得到了无效的第 0 个位置。但是如果我删除了exam_id 条件,那么我得到了正确的排名,但问题是它汇总了我不想要的所有输入考试的分数,因为我需要排名一个特定的考试。

所以请任何人告诉我应该在查询中的哪个位置放置exam_id 条件。

【问题讨论】:

  • 更新您的问题添加适当的数据样本和预期结果
  • 已更新。请立即查看

标签: php mysql


【解决方案1】:

尝试将exam_id 也放入您的子查询中。

(SELECT 
      GROUP_CONCAT(summarks 
        ORDER BY summarks DESC) 
    FROM
      (SELECT 
        SUM(
          marks_obtained_written + marks_obtained_oral + marks_obtained_classwork
        ) AS summarks 
      FROM
        results WHERE exam_id = ?
      GROUP BY student_id

【讨论】:

  • 哦,那行得通。但是又出现了一个错误。分数为 333、333、332 的学生分别排名第一、第一和第三,因为第三名的学生应该排名第二。
  • 已解决。我已经放了 DISTINCT 并且它起作用了。谢谢你的回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多