본문 바로가기
Database/PostgreSQL

[PostgreSQL] limit, offset

by 데이터현 2021. 9. 17.

limit, offset을 알아보자.

 

LIMIT는 몇 개 불러올건지, OFFSET은 어디부터 불러올건지

-- 처음부터 시작해서 100개 Row 불러오기
SELECT * FROM table LIMIT 100;
SELECT * FROM table LIMIT 100 OFFSET 0;

-- 101번째부터 시작해서 5개 ROW 반환
SELECT * FROM table LIMIT 5 OFFSET 100;

 

 

 

---참고---

Python 코드에서는 이를 f-string + for loop 통해 활용 가능 (Data chunking)

# Python
import awswrangler as wr
import boto3
def get_df(query):
    # Anyway, connect to AWS Database through boto3 or awswrangler.
    db_con = wr.postgresql.connect("postgreSQL") # 자세한 것은 또 다른 포스팅 참고
    df = db.read_sql_query(query, db_con)
    return df

total_count = 1000
chunk_size = 99
iteration = int(total_count/chunk_size) if (total_count % chunk_size) == 0 else int(total_count/chunk_size) +1

for iter in range(iteration):
    query = f'''
    SELECT * FROM table LIMIT {chunk_size} OFFSET {iter*chunk_size};
    '''
    print(query)
    df = get_df(query=query)
    # do something

'''
output
    SELECT * FROM table LIMIT 99 OFFSET 0;
    SELECT * FROM table LIMIT 99 OFFSET 99;
    SELECT * FROM table LIMIT 99 OFFSET 198;
    SELECT * FROM table LIMIT 99 OFFSET 297;
    SELECT * FROM table LIMIT 99 OFFSET 396;
    SELECT * FROM table LIMIT 99 OFFSET 495;
    SELECT * FROM table LIMIT 99 OFFSET 594;
    SELECT * FROM table LIMIT 99 OFFSET 693;
    SELECT * FROM table LIMIT 99 OFFSET 792;
    SELECT * FROM table LIMIT 99 OFFSET 891;
    SELECT * FROM table LIMIT 99 OFFSET 990; 
    마지막은 1000을 초과하더라도 DB에 있는 만큼만 불러오게 됨
    PostgreSQL에서 table의 count가 1000이라고 가정 했을 때
    마지막 query를 실행한다면 991부터 1000까지의 데이터만 불러옴
    
'''

 

 

댓글