您的位置:首页 > 数据库 > Oracle

Oracle数据库 row_number() over() 函数使用说明

2017-11-27 09:49 429 查看
原文转载自:http://blog.csdn.net/shuaishifu/article/details/38440803

row_number() over(partition by COLUMN_NAME1 order
by COLUMN_NAME2 DESC) 

含义:从1开始,为每一条分组记录返回一个数字

partition by COLUMN_NAME1,首先根据COLUMN_NAME1 分组,

order by COLUMN_NAME2 ,然后根据COLUMN_NAME2 排序,

DESC(或者ASC),排序是降序还是升序,不填的话,默认为升序。

SQL> select group,order, row_number()
over (partition by group order by order  desc) rownum
from test

group   order                     rownum

--------  ------------------------ --------------------

1          100                        1

1          50                          2

2          200                        1

2          100                        2

2          50                          3

与 rownum 函数的区别(rownum
详细介绍):

rownum排序的时候,先对数据集加入伪列rownum 然后再排序;
函数row_number()排序时, 先对数据集排序然后再添加行号码。

举例说明:

例如表:student(学生)表,表结构为:

ID       char(6)      --学号

name    VARCHAR2(10)   --姓名

create table student (ID char(6), name VARCHAR2(100));

insert into sale values('200001',‘张一’);

insert into sale values('200002',‘王二’);

insert into sale values('200003',‘李三’);

insert into sale values('200004',‘赵四’);

commit;

SQL> select rownum,id,name from student where rownum=1;

    ROWNUM ID     NAME

---------- ------ ---------------------------------------------------

         1 200001 张一

      2 200002 王二
         3 200003 李三
         4 200004 赵四

SQL> select rownum ,id,name from student order by name;

    ROWNUM ID     NAME

---------- ------ ---------------------------------------------------

         3 200003 李三

         2 200002 王二

         1 200001 张一

         4 200004 赵四

SQL> select row_number() over(order by name),id,name from student;

  ROWNUM ID     NAME

---------- ------ ---------------------------------------------------

         1 200003 李三

         2 200002 王二

         3 200001 张一

         4 200004 赵四
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle 函数