web-dev-qa-db-ja.com

postgresqlのRownum

Postgresqlでrownumをシミュレートする方法はありますか?

68
danidacar

Postgresql> 8.4

SELECT 
    row_number() OVER (ORDER BY col1) AS i, 
    e.col1, 
    e.col2, 
    ... 
FROM ... 
81
baklarz2048

Oracle ROWNUMに近いソリューションをPostgres 9.1でテストしました。

select row_number() over() as id, t.*
from information_schema.tables t;
22

Postgresqlには制限があります。

Oracleのコード:

select *
from
  tbl
where rownum <= 1000;

postgresqlのコードでも同じです:

select *
from
  tbl
limit 1000
14
Buka

数字を戻すだけの場合は、これを試してください。

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;

最速ではないかもしれませんが、本当に必要な場合はオプションです。

9
Kuberchaun

Postgresqlには、OracleのROWNUMに相当するものがありません。多くの場合、クエリでLIMITとOFFSETを使用して同じ結果を得ることができます。

3
Sachin Shanbhag

一意のキーがある場合は、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

1
Kaushik Nayak

行番号-1を選択するためにオフセットを使用して制限句を使用します。

制限1オフセット7

0
Lorenzo Zuluaga