postgresql中的Rownum

时间:2010-10-18 13:35:47

标签: postgresql rownum

有没有办法在postgresql中模拟rownum?

7 个答案:

答案 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 |

DEMO

答案 6 :(得分:0)

使用限制clausule,使用偏移量选择行号-1,所以如果你想获得数字8行,那么使用:

限制1偏移7