SQL 기본 및 활용
🗄️ SQLSQL 활용★★★★☆자주

Top N — 정렬한 뒤에 잘라야 한다

행을 자르는 조건이 정렬보다 먼저 적용되면 엉뚱한 행이 남는다. 인라인 뷰에서 정렬한 뒤 바깥에서 자른다.

ROWNUM인라인 뷰ROW_NUMBERFETCH FIRSTTop N

왜 그런지까지

오라클의 ROWNUM 은 행이 나오는 순서대로 붙기 때문에, WHERE ROWNUM <= 5 와 ORDER BY 를 한 쿼리에 같이 쓰면 '아무 5건을 뽑아 정렬한' 결과가 된다. 그래서 정렬을 인라인 뷰 안에서 끝내고 바깥에서 ROWNUM 으로 자른다. 표준 SQL 에서는 ROW_NUMBER() OVER (ORDER BY ...) 나 FETCH FIRST n ROWS ONLY 를 쓴다.

돌려 보기

정렬한 뒤에 자른 상위 3명

헷갈리는 것

ROWNUM 을 안에서 vs 밖에서

같은 층에서 ORDER BY 와 함께 쓰면 정렬 전에 잘려 엉뚱한 행이 남는다. 인라인 뷰에서 정렬한 뒤 바깥에서 잘라야 한다.

확인 문제

넣어 두면 오늘 · 1일 · 3일 · 7일 · 14일 · 30일 간격으로 다시 물어봅니다