티베로(Tibero) 오라클(Oracle)

오라클 top n 쿼리 작성 방법 및 주의점

xemaker 2017. 11. 3. 13:53
ms sql 서버 에서는 top n 쿼리가 있어서 그냥 상위 몇개만 가져오고 싶을때

select top 5 * from tbl;

이런식으로 썼다.

하지만..

오라클에서 쓰려고 했는데 top n 쿼리가 없어서 어떻게 써야 하나 봤더니..

rownum 이라고 있긴 했다.

그러나 rownum을 쓸때는 조심해야 한다.

예를들어

select * from user where rownum<10 order by upt_dm desc;

이러면 업데이트 순으로 정렬하여 상위 9개를 가져오는것 처럼 보이지만 잘못 되었다.

왜냐하면 select 구문에서는 where 절이 먼저 실행되기 때문에 상위 9개 먼저 가져오고 최신순으로 정렬하는 것이다.

그래서 제대로 쓰려면

select * from(
  select * from user order by upt_dm desc)
where rownum<10;

이렇게 써야 최신순으로 정렬된 상위 9개를 제대로 가져올 수 있다.