Mysql 基于不带@variables的聚合和派生表的排序
在我的项目中,这是一个让我头疼的挑战,作为一个php或者说sql新手。 我必须首先指出,我正在使用绑定参数在php中运行这段代码,因为我使用的是pdo 现在,正如标题所示,在从聚合和派生表(from子句)计算出学生的原始分数后,如果sql中没有@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
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?