- 1、本文档共8页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
四个排名函数(row_number、rank、dense_rank和ntile)的比较_
?? 排名函数是SQL Server2005新加的功能。在SQL Server2005中有如下四个排名函数:排名函数为分区中的每一行返回一个排名值。根据所用函数的不同,某些行可能与其他行接收到相同的值。排名函数具有不确定性。
1.?row_number
2.?rank
3.?dense_rank
4.?ntile??? ??? 下面分别介绍一下这四个排名函数的功能及用法。在介绍之前假设有一个t_table表,表结构与表中的数据如图1所示:
图1
其中field1字段的类型是int,field2字段的类型是varchar
一、row_number
??? row_number函数的用途是非常广泛,这个函数的功能是为查询出来的每一行记录生成一个序号。row_number函数的用法如下面的SQL语句所示:
?
select?row_number()?over(order?by?field1)?as?row_number,*?from?t_table
??? 上面的SQL语句的查询结果如图2所示。
图2
??? 其中row_number列是由row_number函数生成的序号列。在使用row_number函数是要使用over子句选择对某一列进行排序,然后才能生成序号。
??? 实际上,row_number函数生成序号的基本原理是先使用over子句中的排序语句对记录进行排序,然后按着这个顺序生成序号。over子句中的order by子句与SQL语句中的order by子句没有任何关系,这两处的order by 可以完全不同,如下面的SQL语句所示:
?
select?row_number()?over(order?by?field2?desc)?as?row_number,*?from?t_table?order?by?field1?desc
??? 上面的SQL语句的查询结果如图3所示。
图3
??? 我们可以使用row_number函数来实现查询表中指定范围的记录,一般将其应用到Web应用程序的分页功能上。下面的SQL语句可以查询t_table表中第2条和第3条记录:
?
with?t_rowtableas(????select?row_number()?over(order?by?field1)?as?row_number,*?from?t_table)select?*?from?t_rowtable?where?row_number1?and?row_number??4?order?by?field1
??? 上面的SQL语句的查询结果如图4所示。
图4
??? 上面的SQL语句使用了CTE,关于CTE的介绍将读者参阅 HYPERLINK /nokiaguy/archive/2009/nokiaguy/archive/2009/01/31/252787.html 《SQL Server2005杂谈(1):使用公用表表达式(CTE)简化嵌套SQL》。??? 另外要注意的是,如果将row_number函数用于分页处理,over子句中的order by 与排序记录的order by 应相同,否则生成的序号可能不是有续的。??? 当然,不使用row_number函数也可以实现查询指定范围的记录,就是比较麻烦。一般的方法是使用颠倒Top来实现,例如,查询t_table表中第2条和第3条记录,可以先查出前3条记录,然后将查询出来的这三条记录按倒序排序,再取前2条记录,最后再将查出来的这2条记录再按倒序排序,就是最终结果。SQL语句如下:
?
?
select?*?from?(select?top?2?*?from(?select?top?3?*?from?t_table?order?by?field1)?a?order?by?field1?desc)?b?order?by?field1
??? 上面的SQL语句查询出来的结果如图5所示。
图5
??? 这个查询结果除了没有序号列row_number,其他的与图4所示的查询结果完全一样。
二、rank
??? rank函数考虑到了over子句中排序字段值相同的情况,为了更容易说明问题,在t_table表中再加一条记录,如图6所示。
图6
??? 在图6所示的记录中后三条记录的field1字段值是相同的。如果使用rank函数来生成序号,这3条记录的序号是相同的,而第4条记录会根据当前的记录数生成序号,后面的记录依此类推,也就是说,在这个例子中,第4条记录的序号是4,而不是2。rank函数的使用方法与row_number函数完全相同,SQL语句如下:
?
select?rank()?over(order?by?field1),*?from?t_t
您可能关注的文档
- 上海财经大学2011级会计系同学给的数理统计卷子.pdf
- 韩语电影单词.doc
- 13春期中考试七年级地理试题.doc
- 房产买卖的法律.doc
- 项目定位细节探讨.doc
- 小学·数学·知识整理.doc
- 轮式和履带拖拉机推广鉴定要求.docx
- 小区物业管理服务要依法进行.doc
- 数学解题能力复习2012年.doc
- 数学专升本科模拟练习(五).doc
- 2025年金肯职业技术学院单招职业适应性测试题库带答案.docx
- 2025年钦州幼儿师范高等专科学校单招综合素质考试题库完美版.docx
- 2025年钟山职业技术学院单招职业适应性考试题库参考答案.docx
- 2025年金华职业技术学院单招职业技能测试题库附答案.docx
- 2025年闽南理工学院单招职业技能测试题库审定版.docx
- 2025年闽南理工学院单招综合素质考试题库审定版.docx
- 2025年闽南理工学院单招职业倾向性考试题库汇编.docx
- 2025年闽南理工学院单招职业倾向性考试题库推荐.docx
- 2025年闽北职业技术学院单招综合素质考试题库1套.docx
- 2025年长沙轨道交通职业学院单招职业技能考试题库一套.docx
最近下载
- 2017年山东省青岛市城阳七年级英语下册 Unit 1-2 复习练习题(无答案)(新版)人教新目标版.doc VIP
- 输变电工程标准工艺(变电工程土建分册)2022版.pdf VIP
- 个人防护用品培训.ppt VIP
- 启动仪式开业典礼模板《启动仪式全程安排及总结》PPT课件.pptx VIP
- 如何做一个出色的班组长.pptx VIP
- 2025年度卫生招聘考试(财务)新版真题卷(附详细解析).docx VIP
- 2025必威体育精装版乡村医生考试试题库含答案.docx VIP
- 全国突发急性传染病防控技能竞赛笔试复习测试附答案(一).doc
- 如何做一个出色的班组长.pptx VIP
- 560期货交易技术策略系统.docx VIP
文档评论(0)