- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个非常简单的 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查询代码
最佳答案
试试这个。
我没有在其中包含 year
和 class_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
屏幕截图片段
关于Php 和 Mysql 根据学生的总分对学生进行排名并给予 .如果他们是领带,也不会连续排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31634617/
好吧,当我运行这段代码时,我得到我的总和等于 0 并且弄乱了我的平均水平和成绩。我不确定我做错了什么total += scores 函数在它应该在的地方,但它仍然没有加起来分数。 int valida
我有一个简单的 jasper 报告,其中只有 USER 和 SCORE 作为列并使用 mysql 和 DB。现在报告工作正常。但后来我想计算总 SCORE 并将其显示在报告的底部。我怎样才能做到这一点
我是 React js 新手。现在我正在编写一个应用程序,用户可以在其中更新团队中每个团队成员的积分。递增和递减工作得很好,我在这里得到了很多帮助。现在我正在尝试显示每支球队的总得分。就像下面的例子一
我是一名优秀的程序员,十分优秀!