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

时间:2016-12-25 01:05:49

标签: mysql sql sum rank

在我的项目中,这对我来说是个头疼的挑战,是一个php或者说是sql新手。 我必须首先表明我在带有绑定参数的php中运行此代码,因为我正在使用pdo。

现在,正如标题所示,在从聚合和派生表(来自子句)计算原始分数,而不在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

所以在派生表中使用Aggregate Sum,然后我添加另一列,它是来自各个主题的标记的总和,如:

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

不幸的是,我尝试了几种方法但没有成功。请帮忙! 同时,我想尽可能多地尝试没有变量。

0 个答案:

没有答案