2026/4/16 16:46:12
网站建设
项目流程
如何搭建钓鱼网站,互联网小项目,海洋seo,wordpress portfolio插件目录
需求
范例运行环境
视图样本设计
功能实现
基础数据展示
SQL语句
继续排序
小结 需求
假设有若干已更新考试成绩的考生#xff0c;考试成绩包括总成绩、分项成绩1、分项成绩2#xff0c;其它信息包括应聘岗位名称、姓名等信息。现希望根据总成绩计算排名#…目录需求范例运行环境视图样本设计功能实现基础数据展示SQL语句继续排序小结需求假设有若干已更新考试成绩的考生考试成绩包括总成绩、分项成绩1、分项成绩2其它信息包括应聘岗位名称、姓名等信息。现希望根据总成绩计算排名成绩越高排名越靠前相同成绩排名并列另外有并列则按总数递增如两个第1后是第3。本文将继续介绍利用partition by 来实现这一需求主要实现如下功能1编写视图获取基础数据包括人员基本信息和考试成绩数据等2通过 partition by 计算排名得到新的视图3根据其它要求计算新的排名范例运行环境操作系统 Windows Server 2019 DataCenter数据库Microsoft SQL Server 2016.netFramework 4.7.2视图样本设计视图成绩表 [v_cj] 设计如下序号字段名类型说明备注1zwmcnvarchar职位名称应聘的岗位名称以此进行分区排序2xmnvarchar姓名3kscj1float考试成绩1计算总成绩的一个分项4kscj2float考试成绩2计算总成绩的一个分项5kszcjfloat考试总成绩计算排名的依据功能实现基础数据展示选择数据视图 v_cj在查询分析器示例如下图如图这是随时显示的基础数据未排序。SQL语句排序的SQL语句代码如下select zwmc,xm,kscj1,kscj2,kszcj ,rank() over (partition by zwmc order by kszcj desc) as ranktip from V_cj运行查询分析器显示结果如下如图框定部分按最高成绩分值进行倒排序分值越高排名越高。当成绩相同时则并列排序下一排序号根据总排序号递增加1如有两个第6名则下个排名从第8名开始以此类推。关键语句rank() over (partition by zwmc order by kszcj desc)按 zwmc 职位名称分区以kszcj(考试总成绩) 降序排列rank() 函数起到了排序功能。继续排序如果排序相同则按分项成绩1继续排序如果仍然一样则按分项成绩2继续排序均为降序SQL 语句如下select zwmc,xm,kscj1,kscj2,kszcj,ranktip from V_cj order by zwmc,ranktip,kscj1 desc,kscj2 desc代码继续将 ranktip 字段封装到 v_cj 视图中然后按照设计的顺序进行排序如下图运行分析结果查询小结我们可以通过 row_number函数计算总排序当排名相同时仍然以分项成绩1和分项成绩2降序计算排名分值越高排名越靠前可通过如下语句实现select zwmc,xm,kscj1,kscj2,kszcj,ranktip, row_number() over (partition by zwmc order by kszcj desc,kscj1 desc,kscj2 desc) as ranktip2 from V_cj关键语句row_number() over (partition by zwmc order by kszcj desc,kscj1 desc,kscj2 desc)按 zwmc 职位名称分区以kszcj(考试总成绩) 降序排列第二排序以kscj1(分项考试成绩1) 降序排列第三排序以kscj2(分项考试成绩2) 降序排列row_number() 函数起到了总排序功能。运行查询分析器结果显示如下如图 ranktip2 字段显示了总排序ranktip 字段显示了并列排序的情况分项成绩参与了最终排序规则的实现。更多partition by 的聚合统计方法可参考我的文章《MS SQL Server partition by 函数实战 统计与输出》至此 partition by 的实例应用我们就介绍到这里具体使用中我们还需要灵活掌握。感谢您的阅读希望本文能够对您有所帮助。