gpt4 book ai didi

php - 跳过不符合 Mysql 排序排名所需值的行中的排名?

转载 作者:搜寻专家 更新时间:2023-10-31 22:03:54 26 4
gpt4 key购买 nike

我也用谷歌搜索并搜索了这个堆栈站点,但找不到哪一个至少能给我一些关于如何实现这一点的想法。我根据一名学生的总分总和计算排名,并确定与 sql 变量的关系。每个学生有五个科目,每周可以进行多次测试。我想从排名中跳过每个科目总得分低于 35% 的学生。例如,一个学生的英语满分 100 分 40 分,MIL 满分 100 分 59 分,科学 130 分 110 分,数学 120 分 98 分,SS 100 分 33 分。如果每个科目的满分是 100,我可以使用以下查询计算:

  SELECT regd,
English, MIL,
Mathematics, SS,
Science,
score, fmscore, perc, Rank
FROM
(
SELECT t.*, IF(@p = score, @n, @n := @n + 1) AS Rank, @p := score
FROM
(
SELECT regd,
SUM(IF(Subject = 'English' , Mark_score, 0)) English,
SUM(IF(Subject = 'MIL' , Mark_score, 0)) MIL,
SUM(IF(Subject = 'Mathematics', Mark_score, 0)) Mathematics,
SUM(IF(Subject = 'SS' , Mark_score, 0)) SS,
SUM(IF(Subject = 'Science' , Mark_score, 0)) Science,
SUM(Full_mark) fmscore,
SUM(Mark_score) score,
SUM(Mark_score) / SUM(Full_mark) * 100 perc
FROM exam e1, (SELECT @n := 0, @p := 0) n
WHERE NOT EXISTS (SELECT null from exam e2 WHERE e1.regd = e2.regd
AND e2.Mark_score/e2.Full_mark<0.35)
GROUP BY regd
ORDER BY score DESC
) t
) r;

因为每个科目的满分不同而不是 100,代码无法为那些在一门或多门科目中获得低于 35% 满分的学生正确跳级。如果单独使用 mysql 无法实现,是否有可能使用 php array?在考试表中,id 是主键,regd 是索引的。这是我的项目,我已经被困在这里一个月了。请帮助我。

最佳答案

您需要首先根据主题对数据进行分组。这样您就可以计算每个主题的百分比并删除那些低于定义限制的人。一旦你实现了这一点,你就可以携带这个输出并用于显示和创建排名。您可以使用类似下面的查询。

 select regd, SUM(IF(Subject = 'English'    , Mark_score, 0)) English,
SUM(IF(Subject = 'MIL' , Mark_score, 0)) MIL,
SUM(IF(Subject = 'Mathematics', Mark_score, 0)) Mathematics,
SUM(IF(Subject = 'SS' , Mark_score, 0)) SS,
SUM(IF(Subject = 'Science' , Mark_score, 0)) Science,
Mark_score, Perc
from (
SELECT regd, Subject,(SUM(Mark_score) / SUM(Full_mark) * 100) Perc , (SUM(Mark_score)) Mark_score
FROM exam e1
GROUP BY regd, Subject
having perc > 35

) as t
order by Mark_score;

关于php - 跳过不符合 Mysql 排序排名所需值的行中的排名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22611717/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com