ROW_NUMBER() OVER (PARTITION BY COL1 ORDER BY COL2)
根据 COL1 分组,在分组内部根据 COL2 排序,而这个值就表示每组内部排序后的顺序编号(组内连续的唯一的)。
row_number() 返回的主要是“行”的信息,并没有排名。
无
用于取 t_table4 表前几名,或者最后几名等。如下:
-- 创建表格
SQL> create table t_table4(name varchar(5), seqno int, description varchar(10));
表已创建。
-- 插入数据
insert into t_table4(name, seqno, description) values('A', '1', 'test');
insert into t_table4(name, seqno, description) values('A', '2', 'test');
insert into t_table4(name, seqno, description) values('A', '3', 'test');
insert into t_table4(name, seqno, description) values('A', '4', 'test');
insert into t_table4(name, seqno, description) values('B', '1', 'test');
insert into t_table4(name, seqno, description) values('B', '2', 'test');
insert into t_table4(name, seqno, description) values('B', '3', 'test');
insert into t_table4(name, seqno, description) values('B', '4', 'test');
insert into t_table4(name, seqno, description) values('C', '1', 'test');
insert into t_table4(name, seqno, description) values('C', '2', 'test');
insert into t_table4(name, seqno, description) values('C', '3', 'test');
insert into t_table4(name, seqno, description) values('C', '4', 'test');如果我想有一个sql语句,搜索的结果如下:
A | 1 | test
A | 2 | test
B | 1 | test
B | 2 | test
C | 1 | test
C | 2 | test具体 SQL 语句如下:
SQL> select name, seqno, description from(
2 select name, seqno, description, row_number() over (partition by name order by seqno) id
3 from t_table4
4 ) where id<=3;
NAME SEQNO DESCRIPTIO
----- ---------- ----------
A 1 test
A 2 test
A 3 test
B 1 test
B 2 test
B 3 test
C 1 test
C 2 test
C 3 test
已选择9行。