Programing

postgresql의 Rownum

lottogame 2020. 11. 8. 09:08
반응형

postgresql의 Rownum


postgresql에서 rownum을 시뮬레이션하는 방법이 있습니까?


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;

Postgresql에는 제한이 있습니다.

오라클의 코드 :

select *
from
  tbl
where rownum <= 1000;

Postgresql의 코드에서도 동일합니다.

select *
from
  tbl
limit 1000

번호를 다시 확인하려면 이것을 시도하십시오.

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에 order by를 추가하여 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을 선택하는 오프셋과 함께 limit clausule을 사용하므로 숫자 8 행을 얻으려면 다음을 사용하십시오.

제한 1 오프셋 7

참고URL : https://stackoverflow.com/questions/3959692/rownum-in-postgresql

반응형