row_number() over 用法
一、row_number() over用法
row_number() over函数是DB2数据库中的一种窗口函数,它可以在查询结果集中为每一行分配一个唯一的行号。它的基本语法如下: row_number() over(partition by 字段名 order by 字段名 [desc]) as 别名
1. partition by 字段名:可以用来定义行号的划分,它的根据指定的字段来分组,每一组里面获取的行号都从1开始计算。 2. order by 字段名:用来对各个组中的行号进行排序,可以使用升序或者降序,默认是升序排序,如果要使用降序排,则需要在字段名后面加入desc标识。 例如:
select row_number() over(partition by deptno order by sal desc) as rn, empno,ename,sal,deptno from emp;
这个查询的结果将会根据emp表中的deptno字段进行分组,然后在每一组内部按sal字段降序进行排序,最后给每一行结果集分配一个从1开始的行号。
二、row_number() over用于分页
row_number() over也可以用来实现分页功能,对于大量数据的分页查询场景,使用这种方式会比其他方式更有效率。其基本语法如下:
- 1 -
select * from (
select row_number() over(order by 字段名) as rn,* from 表名 )
where rn between (当前页码 - 1) * 每页记录数 + 1 and 当前页码 * 每页记录数
这里主要是将查询结果集根据指定的规则排序(按照某个字段),然后在每一行分配一个唯一的行号,最后再根据指定的页码和每页记录数获取对应的分页数据。
- 2 -