zoukankan      html  css  js  c++  java
  • [一招制敌]巧用Sql排名函数即可解决学生多学科分值的排名问题

    需求场景:在一个学校的学生学科分值管理中,会遇到给每个学生的学科分值排名以及对每个选手的学科平均分进行排名的问题。

    第一步:创建数据库及表格

    这里我们采用Sql Server数据库管理系统,创建一个数据库gCodeTop,然后再创建一张存放学生学科分值的表StudentMark,其设计结构如下:



    上述设计界面中的字段解释:

    ID 字段代表主键,字符类型

    StuName 字段代表学生名称 ,字符类型

    SqlServer 字段代表SqlServer成绩,小数类型,保留2位小数

    Math 字段代表数学成绩,小数类型,保留2位小数

    Gym 字段代表体育成绩,小数类型,保留2位小数

    第二步:填充相关测试数据

    打开上述设计好的表格StudentMark表,填充一些测试数据,与下图所示类似即可:

    第三步:每门课的排名查询代码编写

    参考代码如下:



    上述代码解释:

    里面使用了Sql Server特色函数:排名函数Dense_Rank() (注:这是稠排名函数,如果打算使用普通排名函数,可更换成 Rank())。在使用排名函数时候,要先对分值数据进行从大到小的排序,然后才能完成排名即名次的计算,所以,里面有一个排序代码:over(order by ……desc)。最终查询结果多了3列数据,如上图的红色框所示,即每门课的排名次序数据。

    第四步:每个选手的平均分排名代码的编写

    每个选手的的平均分,也就是(SqlServer+Math+Gym)/3,要完成对它们进行名次计算,可以在上述代码的基础上,再添加如下红色框代码,即可搞定。最终的查询结果又多了2列数据。



    格码大叔小结:排名计算,是一个常见的需求。通过Sql Server特色的的排名函数即可完成。请记住稠排名Dense_Rank,名次没有间隔。普通排名Rank,名次可能有间隔。在排名前,一定要通过over(Order by...)完成相关排名数据的排序。Desc代表从大倒小的排序。

  • 相关阅读:
    P2184 贪婪大陆
    codeforces-1348-D Phoenix and Science
    联系我
    留言板
    友链
    java集合ArrayList按指定字段排序
    linux下设置oracle开机自启动
    微信公众号开发参考教程
    java生成快递单并调用打印机打印
    java生成128A条形码
  • 原文地址:https://www.cnblogs.com/Exesoft-Mike/p/11648912.html
Copyright © 2011-2022 走看看