我有一个非常简单的MySQL表格,用于保存每个学生的科目、考试和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进行求和,然后将每个学生的所有分数作为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。请帮助我,如果总分相同,则不要让排名连续。
以下是我的mysql数据副本 http://youth-arena.com/portal/sql.sql 以下是php查询代码。
class_s
='Grade 2' andyear
='2014/2015' GROUP BY admin_no ) sub ORDER BY total_score DESC)t) as result <br> 因此,正如您所提到的,这将带我进入另一个问题级别,即为相同的总分数提供不同的排名。请帮我提供完整的可行代码。谢谢! - Hamzat Luqman