浅谈oracle中rowITeye - 凯时娱乐

浅谈oracle中rowITeye

2019-01-12 12:54:28 | 作者: 向松 | 标签: 排序,依照,分组 | 浏览: 1655

row_number()over(partition by col1 order by col2)表明依据col1分组,在分组内部依据col2排序,而此函数核算的值就表明每组内部排序后的次序编号(组内接连的仅有的)。
与rownum的差异在于:运用rownum进行排序的时分是先对成果集参加伪劣rownum然后再进行排序,而此函数在包括排序从句后是先排序再核算行号码。
row_number()和rownum差不多,功用更强一点(能够在各个分组内从1开端排序)。
rank()是跳动排序,有两个第二名时接下来就是第四名(同样是在各个分组内)
dense_rank()也是接连排序,有两个第二名时依然跟着第三名。相比之下row_number是没有重复值的。

oracle 剖析函数 row_number(),回来一个整数值(

语法格局:

1.row_number() over (order by col_1[,col_2 ...])

效果:依照col_1[,col_2 ...]排序,回来排序后的成果集,

此用法有点像rownum,为每一行回来一个不相同的值:

select rownum,ename,job, 
  row_number() over (order by rownum) row_number 
from emp; 
  ROWNUM ENAME  JOB  ROW_NUMBER 
---------- ---------- --------- ---------- 
  1 SMITH  CLERK  1 
  2 ALLEN  SALESMAN  2 
  3 WARD  SALESMAN  3 
  4 JONES  MANAGER  4 
  5 MARTIN  SALESMAN  5 
  6 BLAKE  MANAGER  6 
  7 CLARK  MANAGER  7 
  8 SCOTT  ANALYST  8 
  9 KING  PRESIDENT  9 
  10 TURNER  SALESMAN  10 
  11 ADAMS  CLERK  11 
  12 JAMES  CLERK  12 
  13 FORD  ANALYST  13 
  14 MILLER  CLERK  14 

假如没有partition by子句, 成果集将是依照order by 指定的列进行排序;

with row_number_test as( 
  select 22 a,twenty two b from dual union all 
  select 1,one from dual union all 
  select 13,thirteen from dual union all 
  select 5,five from dual union all 
  select 4,four from dual) 
select a,b, 
  row_number() over (order by b) 
from row_number_test 
order by a; 

正如咱们所等待的,row_number()回来依照b列排序的成果,

然后再依照a进行排序,才得到下面的成果:

A B  ROW_NUMBER()OVER(ORDERBYB) 
-- ---------- -------------------------- 
1 one  3 
4 four  2 
5 five  1 
13 thirteen  4 
22 twenty two  5 

2.row_number() over (partition by col_n[,col_m ...] order by col_1[,col_2 ...])

效果:先依照col_n[,col_m ...进行分组,

再在每个分组中依照col_1[,col_2 ...]进行排序(升序),

最终回来排好序后的成果集:

with row_number_test as( 
  select 22 a,twenty two b,* c from dual union all 
  select 1,one,+ from dual union all 
  select 13,thirteen,* from dual union all 
  select 5,five,+ from dual union all 
  select 4,four,+ from dual) 
select a,b, 
  row_number() over (partition by c order by b) row_number 
from row_number_test 
order by a; 
 

这个比如中,咱们先依照c列分组,分为2组(*组,+组),

再依照每个小组的b列进行排序(按字符串首字母的ascii码排),

最终依照a列排序,得到下面的成果集:

A B  ROW_NUMBER 
-- ---------- ---------- 
1 one  3 
4 four  2 
5 five  1 
13 thirteen  1 
22 twenty two 
本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-04/34251.htm

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表凯时娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章