티베로(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개를 제대로 가져올 수 있다.
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개를 제대로 가져올 수 있다.