너굴 개발 일지

210609_오라클 순번 매기기 (ROWNUM) 본문

DataBase

210609_오라클 순번 매기기 (ROWNUM)

너굴냥 2021. 6. 9. 18:19

목차

 

오라클 순번매기기 ROWNUM

select rownum, pseq, name, price2, image
from product
where bestyn='y';

ROWNUM이라는 시스템 함수를 사용하면 위와 같이 라인별 순번을 가져올 수 있습니다. 하지만 위와 같이 아무런 정렬이 되지 않은 데이터에 순번을 매긴다면 그 순번은 상당히 의미 없는 숫자가 되어 버릴 것입니다.

 

 

정렬된 데이터에 순번매기기

위의 예제와 같이 순번을 매기는 시스템 함수는 ROWNUM이고 정렬은 ORDER BY를 사용하시면 되는데 ROWNUM와 ORDER BY를 같이 사용할 경우 매겨놓은 순번이 섞여버리는 현상이 발생합니다.

select rownum, pseq, name, price2, image
from product
where bestyn='y'
order by indate desc;

위와같이 ROWNUM함수는 ORDER BY함수를 같이 사용하면 순번이 뒤죽박죽이 됩니다. 그 이유는 먼저 순번을 매기고 난 뒤 ORDER BY 정렬을 하기 때문입니다. 이 문제를 해결하기 위해서는 현재 순번매기기 -> 정렬 순으로 진행하는 방식을 정렬 -> 순번매기기로 순으로 진행하면 해결이 가능합니다.  

 

서브쿼리에서 먼저 정렬(ORDER BY) 후 순번 매기기(ROWNUM)

select rownum, pseq, name, price2, image
from 
(
    select * 
    from product
    where bestyn='y'
    order by indate desc
);

위와 같이 서브쿼리에서 먼저 정렬을 하고 순번을 매기는 방법으로 정렬된 데이터에 순번을 매길 수 있습니다.