Mysql 基于不带@variables的聚合和派生表的排序

Mysql 基于不带@variables的聚合和派生表的排序,mysql,sql,sum,rank,Mysql,Sql,Sum,Rank,在我的项目中,这是一个让我头疼的挑战,作为一个php或者说sql新手。 我必须首先指出,我正在使用绑定参数在php中运行这段代码,因为我使用的是pdo 现在,正如标题所示,在从聚合和派生表(from子句)计算出学生的原始分数后,如果sql中没有@variables,我该如何对班级中的学生进行排名。比如,假设从数据库中提取的数据是: studref Name English Maths Gov Bd1 Ida 66 78 49

在我的项目中,这是一个让我头疼的挑战,作为一个php或者说sql新手。 我必须首先指出,我正在使用绑定参数在php中运行这段代码,因为我使用的是pdo

现在,正如标题所示,在从聚合和派生表(from子句)计算出学生的原始分数后,如果sql中没有@variables,我该如何对班级中的学生进行排名。比如,假设从数据库中提取的数据是:

studref   Name    English    Maths    Gov
  Bd1     Ida      66         78      49
  Bd2     Iyan     58         80      69
  Bd3     Ivan     44         56      80
  Bd4     Iven     63         92      68
  Bd5     Ike      69         77      59
因此,使用派生表中的聚合和,我再添加另一列,这是来自不同主题的分数总和,如:

SUM(THE SCORES) AS accum_raw_scores
 studref   Name    English    Maths    Gov    accum_raw_scores
  Bd1      Ida      66         78      49         193
  Bd2      Iyan     58         80      69         207
  Bd3      Ivan     44         56      80         180
  Bd4      Iven     63         92      68         223
  Bd5      Ike      69         77      59         205
因此,我接下来要做的是添加另一列,它将根据每个学生的科目总分代表每个学生的排名。因此,这就是我希望下面的代码为我处理的地方:

1+(SELECT COUNT(*) 
   FROM (SELECT s.studref, SUM(s.subjectscore) AS total_score
          FROM studentsreports s
          GROUP BY s.studref) AS sub
   WHERE sub.total_score > main.accum_raw_scores) AS overall_position,
因此,最后,我将有如下内容:

studref  Name  English  Maths  Gov  accum_raw_scores   rank
Bd1      Ida    66      78     49         193           4
Bd2      Iyan   58      80     69         207           2
Bd3      Ivan   44      56     80         180           5
Bd4      Iven   63      92     68         223           1
Bd5      Ike    69      77     59         205           3
不幸的是,我尝试了几种方法,但都没有成功。请帮忙!
同时,我想尽量避免使用变量。

包括示例数据和预期/期望的结果。如果没有一个具体的例子,你的意图实际上很难解释。“同时,我想尽量不使用变量。”为什么?另外,解释一下不使用变量背后的原因。其他RDBMS中存在MySQL不具备的功能。在这种情况下,使用变量可以达到预期的结果。然而,避免变量可能会导致更复杂和/或更慢的代码。你的限制是什么?如果使用变量比不使用变量简单,您会使用它们吗?如果使用变量比不使用变量快10倍,您会使用它们吗?你到底什么时候会使用变量还是不使用变量?我还注意到你目前推导秩的方法有一个错误。不要使用
sub.studref=main.studref
。您只需要
sub.total_score>main.accum_raw_scores
(以获得得分较高的学生人数)(尽管这仍然是一种非常缓慢的方法…)为什么没有@variables?