php - mysql 获取学生考试排名

标签 php mysql

我有以下查询。

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 作为学生排名。

enter image description here

在上图中,我得到了无效的第 0 个位置。但是如果我删除 exam_id 条件,那么我会得到正确的排名,但问题是它对所有我不想要的已输入考试的分数进行求和,因为我需要排名具体考试。

所以请有人告诉我应该将 exam_id 条件放在查询中的哪里。

最佳答案

尝试将 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

关于php - mysql 获取学生考试排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43178310/

相关文章:

java - 当 MySql Workbench 未运行时,Java 程序可以连接到数据库吗?

mysql - nodejs中事件驱动事务中的数据库插入/更新

php - 当我们回显 javascript 时,这意味着什么

php - 替换 mysql 中 * 的数值

php - 从其中一个属性具有 $ 符号的对象获取 php 变量

php - Joomla 无法连接到启用 SSL 的数据库

mysql - 在数据库级别处理并发问题

mysql - 在 MySQL 数据库上使用版本控制 (Git)

c# - SqlDataAdapter 插入数据库不工作 C# winform

php - 在 javascript 和 php 中将 URL 参数传递给页面