gpt4 book ai didi

Php 和 Mysql 根据学生的总分对学生进行排名并给予 .如果他们是领带,也不会连续排名

转载 作者:可可西里 更新时间:2023-11-01 06:33:54 31 4
gpt4 key购买 nike

我有一个非常简单的 MySQL 表,我在其中保存了每个学生的考试和 CA 分数及其 admin_no 的科目。看起来像这样:

 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,然后将每个学生的所有分数加起来作为 total_scores,然后对总分进行排名:

SELECT admin_no,rank,total_score
FROM (SELECT *, IF(@marks=(@marks:=total_score), @auto, @auto:=@auto+1) AS rank
FROM (SELECT * FROM
(SELECT admin_no, SUM(exam)+SUM(ca) AS total_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 total_score DESC)t) as result

查询的输出:

 admin_no   rank total_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。请帮助我,如果他们在 total_scores 中并列,我不希望排名连续。

下面是我的mysql数据的副本 http://youth-arena.com/portal/sql.sql

这是php查询代码

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

最佳答案

试试这个。

我没有在其中包含 yearclass_s 因为您可能无法获得可靠的行集(因为您正在 GROUP admin_no).

我已经包含了序数竞争等级 - 选择你需要的那个。

更多信息在这里: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.total_score
THEN @rank_count
WHEN @prev_value := a.total_score
THEN @rank_count := @rank_increasing
END AS competition_rank
, a.*
FROM ( SELECT admin_no
, SUM(exam) + SUM(ca) AS total_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 total_score DESC
) a

屏幕截图片段

enter image description here

关于Php 和 Mysql 根据学生的总分对学生进行排名并给予 .如果他们是领带,也不会连续排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634617/

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