大数跨境
0
0

高考数据分析:考生同分排位算法及其SQL数据库实现

高考数据分析:考生同分排位算法及其SQL数据库实现 Kubernetes技术栈
2025-04-09
1
导读:大家知道高考最重要的是成绩,有成绩做基础,填报志愿录取大学等,就有了依据。不过,比成绩更直观的其实是成绩对应的排位,谁的位次更靠前,谁就拥有更好的选择。

引言

大家知道高考最重要的是成绩,有成绩做基础,填报志愿录取大学等,就有了依据。不过,比成绩更直观的其实是成绩对应的排位,谁的位次更靠前,谁就拥有更好的选择。说到这里,我抛出一个问题考考大家,如果张三、李四两位福建考生的高考总分同为600分,位次是并列吗,如果不是,又如何排序呢?





1



排位合理性

图片
大饼

老师,我觉得总分一样,那位次自然就是一样的。

彬老师
图片

大家看看2024年福建高考(物理组)一分一段表,如下所示。可以看出每一位考生都有同分的情况存在,少则2人,多则700多人,说明同分非常普遍。此时我们假设一种情况,某专业录取仅剩1个名额,多个同分的人恰好都报这个专业,争抢该名额,该怎么筛选呢?


图片
小渣

可以让学校来筛选啊,比如看其特长或专业相关的学科成绩高低?

弘棋.jpg
弘老师

小渣,这需要反复确认,效率太低了,而且也带来很大的不透明性,弊端很明显啊。如果做到同分分出位次,显然就合理多了。

图片
大饼

有道理!我有听某自媒体做过直播,好像物理类是按照语、数、英、物的分数高低依次比较,直到分出高低来。





2



排位的依据

彬老师
图片

这自媒体说的不对哦,咱们一定要有质疑精神,学会自己去验证真伪。作为严肃的高考,成绩位次的算法一定是可以在官方平台找到依据的。

图片
大饼

啊,不对?

彬老师
图片

嗯,误人子弟啊。

关于位次排名,每个省份的情况不尽相同,福建省是依据《福建省高等学校招生委员会 福建省教育厅关于印发2024年福建省普通高等学校招生录取实施办法的通知》的第五章“成绩排序规则”进行的,如下所示。


彬老师
图片

依据规则,位次算法可解读为法依次按语文与数学两科成绩之和语文或数学单科最高成绩外语成绩首选科目(物理或历史)成绩进行依次比拼。如果还分不出胜负,则继续PK选课(生物、化学、地理、政治)。依次为选科的单科最高成绩、次高成绩。如果在如此极端的情况下,还能出现位次相同,那就是天意了。我们做一个测试,建表如下。

-- 考生成绩表(区分文理科)
drop table students;CREATE TABLE students (    student_id   INT PRIMARY KEY,     -- 考生号(唯一标识)    name         VARCHAR(50),         -- 姓名    category     CHAR(1NOT NULL,    -- 科目类别:'P'物理类(理科)/ 'H'历史类(文科)    chinese      INT NOT NULL,        -- 语文成绩    math         INT NOT NULL,        -- 数学成绩    english      INT NOT NULL,        -- 外语成绩    primary_sub  INT NOT NULL,        -- 首选科目成绩:物理或历史    elective1    INT NOT NULL,        -- 再选科目1(如化学、地理)    elective2    INT NOT NULL         -- 再选科目2(如生物、政治));

设计要点

  • 最小化字段:仅存储原始成绩,动态计算组合分(如总分、语文数学之和等)。

  • 通用性:category字段明确区分文理科,primary_sub动态表示物理或历史成绩。

  • 约束:所有成绩字段设为NOT NULL,避免空值干扰排序逻辑。

数据构造

为便于读者观察,特意将数据构造的规整有序,这里插入7条数据。其中 丁一,丁二,丁三,丁四总分皆为645分,丁五为643分,丁六与丁七皆为635分;此外丁二和丁三所有分数学科分数均相同(用于模拟完全相同的极端情况),如下所示。
INSERT INTO students VALUES (1, '丁二', 'P', 120130125859095);INSERT INTO students VALUES (2, '丁四', 'P', 125125125859590);INSERT INTO students VALUES (3, '丁六', 'P', 115135130908580);INSERT INTO students VALUES (4, '丁七', 'P', 130120120809590);INSERT INTO students VALUES (5, '丁三', 'P', 120130125859095);INSERT INTO students VALUES (6, '丁一', 'P', 120130125858897);INSERT INTO students VALUES (7, '丁五', 'P', 120130125859588);COMMIT;

仔细观察,不难看出最终的成绩排名会是丁一最高,丁二和丁三并列第二,丁四、丁五、丁六、丁七分则分获四、五、六、七名。




3



排位的实现

弘棋.jpg
弘老师

这个需求用SQL实现并不复杂,就是对各个纬度依次排序即可。基于前面的建表和插入数据,SQL编写如下。

SELECT student_id AS 考生号, name AS 姓名, chinese AS 语文, math AS 数学, (chinese + math) AS 语文数学总分, -- 显式展示语文+数学总分 english AS 英语, primary_sub AS 物理, elective1 AS 再选1, elective2 AS 再选2, total_score AS 总分, RANK() OVER (   ORDER BY     total_score DESC,     (chinese + math) DESC,     GREATEST(chinese, math) DESC,     english DESC,     primary_sub DESC,     GREATEST(elective1, elective2) DESC,     LEAST(elective1, elective2) DESC ) AS 理科排名FROM (   SELECT     *,     (chinese + math + english + primary_sub + elective1 + elective2) AS total_score   FROM students   WHERE category = 'P') physics_students;

结果如下,和预期完全一样,丁一第一,丁七第七。

SQL代码解析

  1. 子查询筛出物理类考生(category ='P'),计算考生总分(total_score)

  2. 主查询展示成绩及排名

  3. 排名逻辑RANK()窗口函数,按规则排序:

    1. 总分降序:total_score DESC

    2. 语数总分降序:(chinese +math) DESC

    3. 语文或数学最高分降序:GREATEST(chinese, math) DESC

    4. 英语成绩降序:english DESC

    5. 物理成绩降序:primary_sub DESC

    6. 选考科目最高分降序:GREATEST(elective1, elective2) DESC

    7. 选考科目次高分降序:LEAST(elective1, elective2) DESC

这样,即使同分考生也能通过一系列的比较规则,准确确定排名位次,解决了高考同分考生的排序问题。

至此,关于高考考生同分排位,你看明白了吗?




结语

不要听什么就信什么,要有质疑精神。越严肃的事,越要从第一手信源,权威资料中去寻找答案典型如链接(警惕!对AI大模型的错误认知正在误导你)。

有趣的是,我把这个问题拿去问各主流AI,居然有部分AI的回答是完全错误的!但是如果你让AI在回答时提供权威的网站链接,此时你不仅得到了官网资料,这些答错的AI就忽然变准确了,再也不瞎编了


{本期互动} 探讨AI会对教育、培训带来怎样的影响,你想怎么做?
在评论区留下你的宝贵观点,截至4月12日(含),留言且留言处点赞数前三,IF CLUB社区赠可爱冰箱贴,可以拼图的。注:冰箱贴尚在制作中,属于新鲜出炉哦




更多精彩原创内容见公众号
    点关注     不迷路     


往期回顾
“大白话人工智能”系列
“数据库拍案惊奇”系列
“世事洞明皆学问”系列

【声明】内容源于网络
0
0
Kubernetes技术栈
聚焦云原生技术生态建设,涵盖DBA、SRE、DevOps、大数据、AI等领域的实践案例与前沿技术分享,欢迎关注交流。
内容 337
粉丝 0
Kubernetes技术栈 聚焦云原生技术生态建设,涵盖DBA、SRE、DevOps、大数据、AI等领域的实践案例与前沿技术分享,欢迎关注交流。
总阅读243
粉丝0
内容337