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

关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号