SQL Server 2005学习总结:排名函数(一)

日期: 2008-08-19 作者:aierong 来源:TechTarget中国 英文

  Transact-SQL提供了4个排名函数: RANK(),DENSE_RANK(),ROW_NUMBER(),NTILE()


  下面是对这4个函数的解释:


  RANK()


  返回结果集的分区内每行的排名。行的排名是相关行之前的排名数加一。


  如果两个或多个行与一个排名关联,则每个关联行将得到相同的排名。


  例如,如果两位销售员具有相同的SalesYTD值,则他们将并列第一。由于已有两行排名在前,所以具有下一个最大SalesYTD的销售人员将排名第三。


  因此,RANK 函数并不总返回连续整数。


  DENSE_RANK()


  返回结果集分区中行的排名,在排名中没有任何间断。行的排名等于所讨论行之前的所有排名数加一。


  如果有两个或多个行受同一个分区中排名的约束,则每个约束行将接收相同的排名。


  例如,如果两位顶尖销售员具有相同的 SalesYTD 值,则他们将并列第一。接下来 SalesYTD 最高的销售人员排名第二。该排名等于该行之前的所有行数加一。


  因此,DENSE_RANK 函数返回的数字没有间断,并且始终具有连续的排名。


  ROW_NUMBER()


  回结果集分区内行的序列号,每个分区的第一行从 1 开始。


  ORDER BY 子句可确定在特定分区中为行分配唯一 ROW_NUMBER 的顺序。


  NTILE()


  将有序分区中的行分发到指定数目的组中。各个组有编号,编号从一开始。对于每一个行,NTILE 将返回此行所属的组的编号。


  如果分区的行数不能被 integer_expression 整除,则将导致一个成员有两种大小不同的组。按照 OVER 子句指定的顺序,较大的组排在较小的组前面。


  例如,如果总行数是 53,组数是 5,则前三个组每组包含 11 行,其余两个组每组包含 10 行。


  另一方面,如果总行数可被组数整除,则行数将在组之间平均分布。


  例如,如果总行数为 50,有五个组,则每组将包含 10 行。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

aierong
aierong

相关推荐

  • 在SQL Server 2005中实现网页传递变量(二)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 在SQL Server 2005中实现网页传递变量(一)

    在网页传递变量,一般先编码,然后解码即可。如果在SQL 2000中实现这个方法,并不是件容易的事情,需要找到UrlEncode和UrlDecode原理,然后分析编码和解码字符串。

  • 走进SQL Server 2005:十大安全举措

    随着数据库系统被用作网络应用程序后台存储范围的持续扩大,对安全的关注也就越来越必要。虽然从发展的角度来看,围绕在SQL Server 2005的周围的还有不少的杂音,

  • SQL Server 2005:向系统表说再见

    在不使用任何的文档的情况下,编写一个查询,从SQL Server 2000系统表中抽取索引的列表,然后列举每个索引中的字段,并判断这个字段是否按照升序或者降序进行排序。