一、需求

  之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。

  需求很简单:求成绩排名前五的学生信息。

  例如:

  

  由于成绩可以并列,所以前五名可能有多个。例如:

    

  测试数据:  

declare @t table(ID int, StudentName nvarchar(15), Score int) insert into @tselect 1,'黄一',99 union allselect 2,'吴二',99 union allselect 3,'张三',99 union allselect 4,'李四',98 union allselect 5,'王五',97 union allselect 6,'赵六',96 union allselect 7,'田七',95 union allselect 8,'纪八',94 union allselect 9,'邱九',93 union allselect 10,'林十',92 

  我的想法:既然可能出现并列,那么就用 DISTINCT 找到前五的成绩。ok,代码如下:

select t1.* from @t t1join(select distinct top 5 Score from @t order by Score desc) t2on t1.Score = t2.Score    

三、使用内置排名函数 DENSE_RANK

  其实sql server已经内置了这样的函数可以帮助我们轻松实现,ok,直接上代码:

;with cte as(  select dense_rank() over(order by Score desc) rank,* from @t)select * from cte where rank < 6   

  与 DENSE_RANK类似还有一个RANK函数,不过RANK函数不会顺序排名,而是根据序号排。有点绕,把上面的函数改为RANK()就知道了,得到的结果如下:

  

更多相关文章

  1. SQL Server之JSON 函数详解
  2. 《Android和PHP最佳实践》官方站
  3. ES6 变量声明,箭头函数,数组方法,解构赋值,JSON,类与继承,模块化练习
  4. 箭头函数的基础使用
  5. Python技巧匿名函数、回调函数和高阶函数
  6. 浅析android通过jni控制service服务程序的简易流程
  7. android用户界面之按钮(Button)教程实例汇
  8. TabHost与RadioGroup结合完成的菜单【带效果图】5个Activity
  9. Android(安卓)bluetooth介绍(四): a2dp connect流程分析

随机推荐

  1. PHP+Ajax实现文章心情投票功能(代码实例)
  2. php实现微信企业付款到零钱
  3. 关于CentOS6.x/6.5/6.4/6.3/6.2/7.x 64位
  4. 正则表达式中模式修正符作用详解
  5. PHP中的global关键字用法
  6. 深入理解PHP中七个预定义接口
  7. PHP自定义函数+系统函数库(代码示例)
  8. 关于PHP框架中.env文件的加载过程
  9. php中比较两个数组差异的方法
  10. 如何将smarty安装到MVC架构中(代码示例)