row_number(),简单来说就是每一条记录返回数字。
现在,oracle数据库以及sql server数据库都支持了row_number() over ()的用法,具体用法也很相似。
下面通过一个简单的例子来说一下row_number()的简单用法。
我们创建一个表结构以及表数据(student_info)如下所示
学号 姓名 班级 入学班级名次
001 李四 1 4
002 张三 2 1
003 王五 1 3
004 赵六 2 4
005 李毅 1 2
006 钱七 2 3
007 张八 1 1
008 李九 2 2
例1:根据学号的顺序生成row_number
select 学号,姓名,班级,入学班级名次,row_number() over(order by 学号) number from student_info.
结果:
学号 姓名 班级 入学班级名次 number
001 李四 1 4 1
002 张三 2 1 2
003 王五 1 3 3
004 赵六 2 4 4
005 李毅 1 2 5
006 钱七 2 3 6
007 张八 1 1 7
008 李九 2 2 8
例2:在班级内根据学号大小生成row_number,这样生成的row_number将根据班级分组,然后再班级里面排序生成,到另一个分组里面,初值将重新变为1,是不是跟group by语句的用法很相似。
select 学号,姓名,班级,入学班级名次,row_number() over(partition by 班级 order by 入学班级名次) number from student_info.
学号 姓名 班级 入学班级名次 number
007 张八 1 1 1
005 李毅 1 2 2
003 王五 1 3 3
001 李四 1 4 4
002 张三 2 1 1
008 李九 2 2 2
006 钱七 2 3 3
004 赵六 2 4 4
当然,over条件里面的 partition by以及order by语句可以根据多列分组,多列排序,与查询语句中的group by以及order by语句类似。