有什么方法可以在postgresql中模拟rownum?
Answers:
PostgreSQL> 8.4
SELECT
row_number() OVER (ORDER BY col1) AS i,
e.col1,
e.col2,
...
FROM ...
我刚刚在Postgres 9.1中测试了一种接近Oracle ROWNUM的解决方案:
select row_number() over() as id, t.*
from information_schema.tables t;
ORDER BY
外部查询中的。
如果您只想返回一个数字,请尝试此操作。
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;
可能不是最快的,但是如果您确实需要它们,则可以选择。
Postgresql没有等效的Oracle ROWNUM。在许多情况下,通过在查询中使用LIMIT和OFFSET可以达到相同的结果。
如果您有唯一的密钥,则可以使用 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 |
使用极限子句,并使用偏移量选择行号-1,因此,如果您想获取第8行,请使用:
极限1偏移7