使用窗口函数row_number()select row_number() OVER (ORDER BY id) as rownum ,* from score;如果不关心排序,可以这样select row_number() over() as rownum,* from score;
oracle
中
的
row
num
是一个虚拟列,每输出一行递增1。但是在
pg
中
目前没有
row
num
虚拟列,那么如果从
oracle
迁移到
pg
该如何实现呢?
要在
pg
中
实现
row
num
我们得先弄清楚
oracle
中
的
row
num
有什么作用,是如何使用的。
对于
row
num
来说它是
oracle
系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
row
num
使用场景1:分页输出
oracle
中
分页:
SQL> select * from t1 where
row
num
=1;
----------
PostgreSQL
中
没有
类似
于
Oracle
中
的
ROW
NUM
的函数,但可以通过使用 limit 和 offset 实现
类似
的需求。例如:
select * from table_name limit 10 offset 20;
这将从第 21 行开始返回最多 10 行数据。
select b.* from
(select @
row
num
:=@
row
num
+ 1 AS rm,a.* from
(SELECT @
row
num
:= 0) r,
) a ) b where b.rm <= #{page}) c where c.rm >= #{page}
参考资料: http://tech.ddvip.com/2008-10/122490439383296.html
和 http://tenn.javaeye.com/blog/99339
对于
Oracle
的
row
num
问题,很多资料都说不支持>,>=,=,between……and,只能用以上符号(<、& lt;=、!=),并非说用>,>=,=,between……and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好