Rownum в postgresql - PullRequest
       4

Rownum в postgresql

68 голосов
/ 18 октября 2010

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

Ответы [ 7 ]

81 голосов
/ 18 октября 2010

Postgresql> 8,4

SELECT 
    row_number() OVER (ORDER BY col1) AS i, 
    e.col1, 
    e.col2, 
    ... 
FROM ... 
22 голосов
/ 03 октября 2012

Я только что протестировал в Postgres 9.1 решение, близкое к Oracle ROWNUM:

select row_number() over() as id, t.*
from information_schema.tables t;
13 голосов
/ 25 сентября 2015

Postgresql имеют ограничение.

Код Oracle:

select *
from
  tbl
where rownum <= 1000;

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

select *
from
  tbl
limit 1000
9 голосов
/ 18 октября 2010

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

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

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

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

3 голосов
/ 18 октября 2010

Postgresql не имеет эквивалента Oracle ROWNUM. Во многих случаях вы можете достичь того же результата, используя LIMIT и OFFSET в своем запросе.

1 голос
/ 10 февраля 2018

Если у вас есть уникальный ключ, вы можете использовать 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

0 голосов
/ 22 апреля 2017

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

limit 1 offset 7

...