Rownum в postgresql


есть ли способ имитировать rownum в postgresql ?

7 63

7 ответов:

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;

Если вы просто хотите номер, чтобы вернуться попробовать это.

create temp sequence temp_seq;
SELECT inline_v1.ROWNUM,inline_v1.c1
FROM
(
select nextval('temp_seq') as ROWNUM, c1 
from sometable
)inline_v1;

вы можете добавить order by в SQL inline_v1, чтобы ваш ROWNUM имел некоторое последовательное значение для ваших данных.

select nextval('temp_seq') as ROWNUM, c1 
from sometable
ORDER BY c1 desc;

не может быть быстрым, но это вариант, если вы действительно нуждаетесь в них.

у Postgresql есть предел.

в Oracle:
select *
from
  tbl
where rownum <= 1000;

то же самое в коде Postgresql:

select *
from
  tbl
limit 1000

Postgresql не имеет эквивалента ROWNUM Oracle. Во многих случаях вы можете достичь того же результата, используя 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 |

демо

используйте ограничение clausule, со смещением, чтобы выбрать номер строки -1 Так что если вы хотите получить номер 8 строки так что используйте:

ограничение 1 смещение 7