Rownum в postgresql
есть ли способ имитировать rownum в postgresql ?
7 ответов
Я только что протестировал в 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;
вы можете добавить порядок в INLINE_V1 SQL, чтобы ваш 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 |
используйте limit clausule, со смещением, чтобы выбрать номер строки -1, поэтому, если вы хотите получить строку 8, используйте:
ограничение 1 смещение 7