[SQL] TOP-N 쿼리 (ROWNUM)
Oracle에서는 MySQL과는 다르게 `LIMIT`을 사용할 수 없다. 따라서, `ROWNUM`을 통해 다른 방법으로 TOP N개를 추출해야 한다.
주로, 빌보드 차트 TOP 100과 같이 위에서 N개를 추출할 때 사용한다.
Aug 20, 2024
Oracle에서는 MySQL과는 다르게
LIMIT
을 사용할 수 없다. 따라서, ROWNUM
을 통해 다른 방법으로 TOP N개를 추출해야 한다.주로, 빌보드 차트 TOP 100과 같이 위에서 N개를 추출할 때 사용한다.
✅ 1. ROWNUM
ORACLE은 ROWNUM이라는 가짜 컬럼을 가지고 있다. 사용자가 따로 정의한 컬럼이 아닌, 시스템 상에서 존재하는 컬럼이다. ROWNUM은 데이터의 순번을 나타낸다.
☑️ 1) 올바른 예시
ROWNUM을 WHERE 절에 사용하여 데이터를 특정 개수만큼 가져올 수 있다.
☑️ 2) 잘못된 예시
단, 주의할 점은
ROWNUM은
WHERE ROWNUM = 5
와 같은 조건을 사용할 수 없다. 그 대신,
WHERE ROWNUM < 5
와 같은 조건식을 사용해야 한다.☑️ 3) 예외로 = 1은 가능함
예외로,
WHERE ROWNUM = 1
은 사용이 가능하다.☑️ 4) 주의 사항
또 주의할 점은,
ORDER BY
절이 WHERE
절보다 나중에 수행되기 때문에 ROWNUM
으로 순서를 지정할 때에는 ORDER BY
절 바깥에서 해야 한다. ROWNUM
과 ORDER BY
를 같은 단락에서 작성하게 될 경우 ROWNUM
으로 랜덤하게 순서가 지정된 후 ORDER BY
로 정렬되기 때문이다.잘못된 경우. ROWNUM이 먼저 부여되고, 10개를 가져와 정렬함.
올바른 경우. 정렬된 데이터를 가져와 ROWNUM을 부여하고, 상위 10개를 가져옴.
✅ 2. 그 외
그 외에도
RANK
나 DENSE_RANK
를 사용할 수 있지만, 이들은 중복 순위가 부여될 수 있기 때문에 상황에 맞게 선택해야 한다.Share article