如何用dense_rank函数求成绩排名前五的学生信息
Admin 2022-06-29 群英技术资讯 1041 次浏览
今天小编跟大家讲解下有关“如何用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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
对于集合运算相比大家都不陌生,在SQL中提供了三种对检索结果进行集合运算的命令,并集UNION,交集INTERSECT,差集EXCEPT。这篇文章就主要介绍这三种集合运算的命令的用法,感兴趣的篇朋友继续往下看吧。
这篇文章主要介绍了Sql Server中REPLACE函数的使用的相关资料,需要的朋友可以参考下
这篇文章主要为大家介绍了SQLServer索引和视图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
本文主要介绍了SQL实现筛选出连续3天登录用户与窗口函数的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
SQRT 函数用于计算得出任何数值的平方根,有不少朋友对于SQRT函数的使用比较感兴趣,下面小编给大家整理和分享了相关知识和资料,易于大家学习和理解,有需要的朋友可以借鉴参考,下面我们一起来了解一下吧。
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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