row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的).
举个例子:
1、首先创建一个表
create table tab1(
id number(4),
name varchar2(100)
);
2、插入几条记录
insert into tab1 (ID, NAME) values (1, 'aa');
insert into tab1 (ID, NAME) values (1, 'ab');
insert into tab1 (ID, NAME) values (1, 'ac');
insert into tab1 (ID, NAME) values (2, 'bb');
insert into tab1 (ID, NAME) values (2, 'bc');
insert into tab1 (ID, NAME) values (2, 'bd');
insert into tab1 (ID, NAME) values (3, 'cc');
insert into tab1 (ID, NAME) values (3, 'cd');
insert into tab1 (ID, NAME) values (3, 'ce');
3、需求为按id分组,在组内以name排序,排序为前两个,这时就需
要用到row_number over 函数
select * from (
select id,name,row_number() over (partition by
id order by name) row_num
from tab1)
where row_num<3
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23205405/viewspace-774962/
,如需转载,请注明出处,否则将追究法律责任。