SQL 기초

오늘의 쿼리 05 | OFFSET으로 앞의 행 건너뛰기

Sallagudia 2026. 10. 28. 08:00

어제는 LIMIT으로 결과 개수를 제한했습니다. 오늘은 앞의 행을 건너뛰는 OFFSET을 함께 써보겠습니다. 상품을 가격순으로 2개씩 보여줄 때 두 번째 묶음을 가져오는 예제입니다.

예제 데이터

아래 예제는 PostgreSQL 기준입니다. WITH와 VALUES로 쿼리 안에 데이터를 만들므로 그대로 실행할 수 있습니다.

product_id product_name price
1 노트 3000
2 펜 1000
3 지우개 1000
4 가방 20000
5 파일 5000

오늘의 쿼리

WITH products (product_id, product_name, price) AS (
    VALUES
        (1, '노트', 3000),
        (2, '펜', 1000),
        (3, '지우개', 1000),
        (4, '가방', 20000),
        (5, '파일', 5000)
)
SELECT product_id, product_name, price
FROM products
ORDER BY price ASC, product_id ASC
LIMIT 2 OFFSET 2;

ORDER BY로 가격순으로 정렬한 뒤 OFFSET 2가 앞의 2행을 건너뜁니다. 그다음 LIMIT 2가 최대 2행을 가져옵니다. 첫 번째 묶음은 OFFSET 0, 두 번째 묶음은 OFFSET 2입니다.

예상 결과

정렬 순서는 펜 → 지우개 → 노트 → 파일 → 가방입니다. 앞의 두 상품을 건너뛰면 다음 두 상품이 나옵니다.

product_id product_name price
1 노트 3000
5 파일 5000

실무에서 주의할 점

OFFSET은 페이지 번호가 아니라 건너뛸 행의 개수입니다. ORDER BY 없이 페이지를 나누면 결과 순서를 보장할 수 없습니다. 가격이 같은 상품도 있으므로 고유한 product_id까지 정렬해 순서를 안정적으로 만드세요. 또한 큰 OFFSET은 건너뛸 행도 계산해야 하므로 비효율적일 수 있습니다.

참고: PostgreSQL 공식 문서 — LIMIT과 OFFSET

다음 글에서는 필요한 값만 중복 없이 보는 DISTINCT를 살펴보겠습니다.

반응형