PHP   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Php和Mysql根据他们的总分给予学生排名并给予.如果他们是关系,也不会连续排名大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个非常简单的 MySQL表,我用admin_no为每个学生保存试和CA分数的科目.它看起来像这样
admin_no   subject     ca  exam    year       class_s 
10/00182     IRS        39  56    2014/2015     Grade 2
10/00177    English     39  59    2014/2015     Grade 2
10/00177    Mathematics 34  59    2014/2015     Grade 2
10/00177    Basic       37  59    2014/2015     Grade 2
10/00177    Social      39  60    2014/2015     Grade 2
10/00177    Yoruba      33  59    2014/2015     Grade 2
09/00159    English     37  59    2014/2015     Grade 2
09/00159    Mathematics 35  60    2014/2015     Grade 2
09/00159    Basic       39  59    2014/2015     Grade 2
.......................................................

我用下面的mySQL查询求和所有科目试分数和CA,然后将每个学生的所有分数总计为@R_624_10586@l_scores,然后对总分进行排名:

SELECT admin_no,rank,@R_624_10586@l_score
FROM (SELECT *,IF(@marks=(@marks:=@R_624_10586@l_score),@auto,@auto:=@auto+1) AS rank 
FROM (SELECT * FROM 
  (SELECT admin_no,SUM(exam)+sum(ca) AS @R_624_10586@l_score,year,class_s
    FROM subjects_1,(SELECT @auto:=0,@marks:=0) as init WHERE `class_s`='Grade 2' and `year`='2014/2015'
     GROUP BY admin_no ) sub ORDER BY @R_624_10586@l_score desc)t) as result

查询输出

admin_no   rank @R_624_10586@l_score    
08/00076    1   1615
10/00170    2   1613
12/00300    3   1609
09/00091    4   1604
10/00182    5   1600
09/00159    6   1583
10/00177    7   1574
09/00152    8   1561
09/00165    9   1540
10/00176    10  1516
13/00354    11  1497
10/00178    12  1470
14/00348    13  1409
**14/00346  14  12
15/00371    14  12
09/00156    15  7**

问题:输出很好,但是在最后三个级别中都有问题.总分12在14/00346和15/00371中出现两次并且它们被给予相同的等级,这是好的但是接下来的12是7和它排名15而不是17.请帮助我,如果他们在@R_624_10586@l_scores中的关系,我不希望排名是连续的.

Bellow是我的MysqL数据的副本
@L_404_1@

这是PHP查询代码

http://youth-arena.com/portal/query.txt

试试这个.

我没有在那里包含year和class_s,因为你可能无法获得可靠的行集(因为你是admin_no的GROUPing).

我已经包括了序数和竞争排名 – 选择你需要的任何一个.

更多信息:https://en.wikipedia.org/wiki/Ranking

我不知道谁在并列时获得更高级别的指导方针,但作为一个建议 – 你可以做一个学生研究的主题数量来确定这个(包括sql中用于举例目的).

SET @prev_value = NULL;
SET @rank_count = 0;
SET @rank_increasing = 0;
SELECT @rank_increasing := @rank_increasing + 1 AS ordinal_rank,CASE
       WHEN @prev_value = a.@R_624_10586@l_score
          THEN @rank_count
       WHEN @prev_value := a.@R_624_10586@l_score
          THEN @rank_count := @rank_increasing 
        END AS competition_rank,a.*
  FROM ( SELECT admin_no,SUM(exam) + sum(ca) AS @R_624_10586@l_score,SUM(exam) AS sum_exam,sum(ca) AS sum_ca,COUNT(DISTinCT subject) AS subject_count
           FROM subjects_1
          GROUP BY admin_no
          ORDER BY @R_624_10586@l_score DESC
       ) a

截图摘要

大佬总结

以上是大佬教程为你收集整理的Php和Mysql根据他们的总分给予学生排名并给予.如果他们是关系,也不会连续排名全部内容,希望文章能够帮你解决Php和Mysql根据他们的总分给予学生排名并给予.如果他们是关系,也不会连续排名所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。