如何用dense_rank函数求成绩排名前五的学生信息
Admin 2022-06-29 群英技术资讯 1066 次浏览
今天小编跟大家讲解下有关“如何用dense_rank函数求成绩排名前五的学生信息”的内容 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了相关资料,希望小伙伴们看了有所帮助。一、需求
之前sql server 的排名函数用得最多的应该是RoW_NUMBER()了,我通常用ROW_NUMBER() + CTE 来实现分页;今天逛园,看到另一个内置排名函数还不错,自己顺便想了一个需求,大家可以花1分钟先想想要怎么实现。
需求很简单:求成绩排名前五的学生信息。
例如:

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

测试数据:
declare @t table (ID int, StudentName nvarchar(15), Score int) insert into @t select 1,'黄一',99 union all select 2,'吴二',99 union all select 3,'张三',99 union all select 4,'李四',98 union all select 5,'王五',97 union all select 6,'赵六',96 union all select 7,'田七',95 union all select 8,'纪八',94 union all select 9,'邱九',93 union all select 10,'林十',92
二、自己实现
我的想法:既然可能出现并列,那么就用 DISTINCT 找到前五的成绩。ok,代码如下:
select t1.* from @t t1 join(select distinct top 5 Score from @t order by Score desc) t2 on 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
四、扩展,内置排名函数RANK
与 DENSE_RANK类似还有一个RANK函数,不过RANK函数不会顺序排名,而是根据序号排。有点绕,把上面的函数改为RANK()就知道了,得到的结果如下:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是有关sqlserver分页的内容,主要介绍4种sqlserver分页方法,分别三重循环、利用max、利用row_number关键字和offset /fetch next,下文有具体示例供大家参考学习。
FORMAT() 函数用于对字段的显示进行格式化,有不少朋友对于FORMAT() 函数的用法比较感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
本文通过介绍默认使用索引、强制使用聚集索引、强制使用非聚集索引让我们知道对于检索所有列结果集使用主键的聚集索引是最佳选择。有兴趣的朋友可以看下
这篇文章主要为大家介绍了SQL Server Transact-SQL编程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
这篇文章主要为大家介绍了数据库初始化及数据库服务端操作的过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008