有没有办法在postgresql中模拟rownum?
答案 0 :(得分:81)
Postgresql> 8.4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
答案 1 :(得分:21)
我刚刚在Postgres 9.1中测试了一个接近Oracle ROWNUM的解决方案:
select row_number() over() as id, t.*
from information_schema.tables t;
答案 2 :(得分:12)
Postgresql有限制。
Oracle的代码:
select *
from
tbl
where rownum <= 1000;
在Postgresql的代码中也是如此:
select *
from
tbl
limit 1000
答案 3 :(得分:9)
如果你只是想要一个号码回来试试这个。
create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1
from sometable
)inline_v1;
您可以通过inline_v1 SQL添加订单,以便您的ROWNUM对您的数据有一些连续的含义。
select nextval('temp_seq') as ROWNUM, c1
from sometable
ORDER BY c1 desc;
可能不是最快的,但如果你真的需要它们,它是一个选择。
答案 4 :(得分:3)
Postgresql没有Oracle的ROWNUM。 在许多情况下,您可以通过在查询中使用LIMIT和OFFSET来获得相同的结果。
答案 5 :(得分:1)
如果您有唯一的密钥,则可以使用COUNT(*) OVER ( ORDER BY unique_key ) as ROWNUM
SELECT t.*, count(*) OVER (ORDER BY k ) ROWNUM
FROM yourtable t;
| k | n | rownum |
|---|-------|--------|
| a | TEST1 | 1 |
| b | TEST2 | 2 |
| c | TEST2 | 3 |
| d | TEST4 | 4 |
答案 6 :(得分:0)
使用限制clausule,使用偏移量选择行号-1,所以如果你想获得数字8行,那么使用:
限制1偏移7