Row_number () over (partition by col1 order by col2)的用法

ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2) --(其中,COL1,COL2能够为多列)
select xt.id,
       xt.item,
       xt.attribute1,
       xt.attribute2,
       ROW_NUMBER() OVER(PARTITION BY xt.id,xt.item order by xt.id,xt.item) test
  from xxuts_test xtspa


表示根据COL1分组,在分组内部根据 COL2排序 
而这个值就表示每组内部排序后的顺序编号(组内连续的惟一的)blog

RANK() 相似,不过RANK 排序的时候跟派名次同样,能够并列2个第一名以后 是第3名排序

LAG 表示 分组排序后 ,组内后面一条记录减前面一条记录的差,第一条可返回 NULL文档

BTW: EXPERT ONE ON ONE 上讲的最详细,还有不少相关特性,文档看起来比较费劲get

row_number()和rownum差很少,功能更强一点(能够在各个分组内从1开时排序) 
rank()是跳跃排序,有两个第二名时接下来就是第四名(一样是在各个分组内) 
dense_rank()l是连续排序,有两个第二名时仍然跟着第三名。 
相比之下row_number是没有重复值的 
lag(arg1,arg2,arg3): 
arg1是从其余行返回的表达式 
arg2是但愿检索的当前行分区的偏移量。是一个正的偏移量,时一个往回检索之前的行的数目。 
arg3是在arg2表示的数目超出了分组的范围时返回的值。it

 

 

row_number() over ([partition by col1] order by col2) ) as 别名
表示根据col1分组,在分组内部根据 col2排序
而这个“别名”的值就表示每组内部排序后的顺序编号(组内连续的惟一的),[partition by col1] 可省略。io

相关文章
相关标签/搜索