2025-08-30 13:10

Tags: SQL

Top N 쿼리

  • 정렬 기준에 따라 가장 상위 N개의 결과만 효율적으로 가져오는 쿼리
  • 전체 데이터를 정렬하는 비효율을 제거해 필요한 자워만 사용해 원하는 결과 N개를 신속하게 반환
  • 적절한 인덱스 가 있느냐가 성능에 지대한 영향을 준다.
  1. 정렬 (Ordering): 무엇을 기준으로 ‘Top’을 결정할 것인가? (예: 판매량, 최신순, 점수 등) - ORDER BY 절이 이 역할 한다.
  2. 제한 (Limiting): 정렬된 결과 중 몇 개를 가져올 것인가? - 각 데이터베이스마다 다른 키워드가 이 역할 한다.
데이터베이스문법 예시 (상위 10개 조회)특징
MySQL / PostgreSQLSELECT * FROM products ORDER BY sales DESC LIMIT 10;LIMIT 키워드를 사용. 가장 직관적이고 널리 쓰임.
OracleSELECT * FROM (SELECT * FROM products ORDER BY sales DESC) WHERE ROWNUM <= 10;ROWNUM이라는 가상 컬럼을 사용. ORDER BY가 적용되기 전에 ROWNUM이 할당될 수 있어 서브쿼리와 함께 사용해야 함.
SQL ServerSELECT 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)