row_number,rank,dense_rank等SQL函数|数据库|码途山海.智隐长卷 -

程序人生|重庆纽新

找回密码
立即注册

QQ登录

只需一步,快速开始

欢迎访问【程序人生-重庆纽新】,本网站为软件开发人员视觉的IT资讯、软件开发中各种问题的解决办法!!
搜索
发新帖


2308

积分

0

好友

259

主题
楼主
发表于 2016-7-28 14:18:22 | 查看: 1041| 回复: 0

1、row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 行号

2、rank() OVER (PARTITION BY COL1 ORDER BY COL2)    跳跃排名

3、dense_rank() OVER (PARTITION BY COL1 ORDER BY COL2) 连续排名

表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).

  与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码.

  row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序).

  rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内).

  dense_rank()是连续排序,有两个第二名时仍然跟着第三名。相比之下row_number是没有重复值的 .

4、lag(arg1,arg2,arg3)、lead(arg1,arg2,arg3):取当前行的前、后arg2行

arg1是从其他行返回的表达式
arg2是希望检索的当前行分区的偏移量。1是一个正的偏移量,是一个往回检索以前的行的数目。
arg3是在arg2表示的数目超出了分组的范围时返回的值。


优点:减少编程语言代码,且SQL SERVER与Oracle均支持

缺点:不支持JPA等ORM框架,MySQL不支持此类函数!


收藏回复 只看该作者 道具 举报

高级模式
B Color Image Link Quote Code Smilies



QQ|小黑屋| 码途山海.智隐长卷 渝ICP备15002301号-2   渝公网安备50011202504426

GMT+8, 2025-5-18 00:55 , Processed in 0.040129 second(s), 24 queries .

©Copyright 程序人生!

©2012-2015重庆纽新

快速回复 返回顶部 返回列表