ROW_NUMBER 排序后顺序号分析函数

语法

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行。

关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号