2025-08-30 13:10
Tags: SQL
Top N 쿼리
- 정렬 기준에 따라 가장 상위 N개의 결과만 효율적으로 가져오는 쿼리
- 전체 데이터를 정렬하는 비효율을 제거해 필요한 자워만 사용해 원하는 결과 N개를 신속하게 반환
- 적절한 인덱스 가 있느냐가 성능에 지대한 영향을 준다.
- 정렬 (Ordering): 무엇을 기준으로 ‘Top’을 결정할 것인가? (예: 판매량, 최신순, 점수 등) - ORDER BY 절이 이 역할 한다.
- 제한 (Limiting): 정렬된 결과 중 몇 개를 가져올 것인가? - 각 데이터베이스마다 다른 키워드가 이 역할 한다.
데이터베이스 | 문법 예시 (상위 10개 조회) | 특징 |
---|---|---|
MySQL / PostgreSQL | SELECT * FROM products ORDER BY sales DESC LIMIT 10; | LIMIT 키워드를 사용. 가장 직관적이고 널리 쓰임. |
Oracle | SELECT * FROM (SELECT * FROM products ORDER BY sales DESC) WHERE ROWNUM <= 10; | ROWNUM 이라는 가상 컬럼을 사용. ORDER BY 가 적용되기 전에 ROWNUM 이 할당될 수 있어 서브쿼리와 함께 사용해야 함. |
SQL Server | SELECT TOP 10 * FROM products ORDER BY sales DESC; | SELECT 절 바로 뒤에 TOP N 을 명시. |
ANSI SQL 표준 | SELECT * FROM products ORDER BY sales DESC FETCH FIRST 10 ROWS ONLY; | 표준 문법으로, 여러 DB에서 지원이 확대되는 추세. OFFSET 과 함께 페이징 구현에 유용. |
ROW_NUMBER()
: 순위를 중복 없이 매깁니다. (1, 2, 3, 4)RANK()
: 공동 순위가 있으면 다음 등수는 건너뜁니다. (1, 2, 2, 4)DENSE_RANK()
: 공동 순위가 있어도 다음 등수를 건너뛰지 않습니다. (1, 2, 2, 3)