SQL 표준형
Oracle 12c+ / PostgreSQLORDER BY price DESC FETCH FIRST 10 ROWS ONLY OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
이식성을 의식할 때 읽기 좋은 형태입니다. Oracle 최신 버전과 PostgreSQL에서 사용할 수 있습니다.
중요한 기준은 먼저 정렬 기준을 고정한 뒤 결과를 자르는 것입니다. 문법은 엔진별로 다르지만 TOP-N의 사고방식은 같습니다.
ORDER BY price DESC FETCH FIRST 10 ROWS ONLY OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
이식성을 의식할 때 읽기 좋은 형태입니다. Oracle 최신 버전과 PostgreSQL에서 사용할 수 있습니다.
ORDER BY price DESC LIMIT 10 LIMIT 10 OFFSET 10 LIMIT 10, 10
가장 짧고 자주 보이는 형태입니다. MySQL의 콤마 문법은 첫 숫자가 OFFSET, 둘째 숫자가 개수입니다.
SELECT TOP (10) * FROM products ORDER BY price DESC OFFSET 10 ROWS FETCH NEXT 10 ROWS ONLY
단순 상위 N은 TOP이 짧고, 페이지네이션은 ORDER BY와 함께 OFFSET FETCH를 사용합니다.
SELECT * FROM ( SELECT * FROM products ORDER BY price DESC ) WHERE ROWNUM <= 10
정렬 후 상위 N을 얻으려면 서브쿼리로 먼저 정렬한 결과를 만든 뒤 ROWNUM을 적용합니다.
TOP-N은 어떤 기준의 상위인지 ORDER BY로 먼저 계약합니다.
OFFSET은 잘라낼 앞 행 수, FETCH/LIMIT은 가져올 행 수입니다.
WITH TIES는 마지막 순위와 같은 값을 가진 행까지 함께 반환합니다.