Top N 한눈에 보기
Top N 쿼리는 정렬 기준으로 상위 N개 행만 뽑는 쿼리입니다(매출 상위 10개 상품, 최신 주문 5건 등). 핵심은 정렬을 먼저 끝낸 뒤 N개를 자르는 것입니다. 순서가 뒤집히면 정렬과 무관한 아무 N개가 잘려 나옵니다.
방법은 DBMS마다 다릅니다. Oracle은 ROWNUM과 12c부터 표준 FETCH FIRST, SQL Server는 TOP, MySQL은 LIMIT를 씁니다. 그룹별 상위 N개는 ROW_NUMBER() OVER (PARTITION BY ...)로 구합니다.
- ROWNUMOracle 의사 열
정렬 전에 매겨짐 → 인라인 뷰로 정렬 먼저
- FETCH표준 FETCH FIRST
Oracle 12c+ · ORDER BY 뒤 ·
WITH TIES·OFFSET - TOPSQL Server TOP
SELECT TOP n·TOP n WITH TIES(Oracle에는 없음) - ROW#윈도우 함수
ROW_NUMBER() OVER· PARTITION BY로 그룹별
- EMP 읽기
- ORDER BY SAL DESC
- 번호 매기기
- WHERE 번호 <= N
ROWNUM은 같은 쿼리 블록에서 ORDER BY보다 먼저 매겨지므로, 정렬을 인라인 뷰 안에서 먼저 끝내야 합니다.
| NAME | SAL |
|---|---|
| 김 | 3000 |
| 이 | 5000 |
| 박 | 4500 |
| 최 | 4500 |
| 홍 | 2000 |