본문 바로가기

Oracle DB

ROW_NUMBER() OVER()

ROW_NUMBER( ) OVER( )

학원에서 배웠던 오라클 DB 중 마지막으로 배웠던 내용이다.

분석함수 중의 하나로 테이블에 있는 데이터를 특정 용도로 분석하여 결과를 반환하는 함수다.

ROW_NUMBER( ) OVER( )는 ROWNUM이랑 비슷하다.

*항상 같이 해왔던 testboard를 예시 테이블로 들었다.

 

--기본 형식

ROW_NUMBER() OVER([PARTITION BY 컬럼] ORDER BY COLUMN)
--[그룹으로 묶어서 그 그룹 내에] COLOMN 기준으로 정렬한 후 번호를 매기는 함수
--그룹을 설정해서 그룹내 멤버(같은 그룹의 행의 갯수)가 2 이상인 경우 COLUMN 기준으로 번호를 매긴다.

*대괄호로 묶여있는 부분은 선택사항이다. 그룹으로 묶는다는 것은 컬럼의 같은 값들끼리로 묶는다는 의미다.

-- 사용 예제1
SELECT ROW_NUMBER() OVER(ORDER BY A.BIDX) AS RNUM, A.* FROM TESTBOARD A;

사용 예제1의 결과
rownum이랑 같은 결과를 나타낸 것을 볼 수 있다.

[PARTITION BY 컬럼]을 적용해서 나타내 보자.

글을 쓴 사람의 회원번호(MIDX)끼리 그룹을 맺어보면 다음과 같은 결과가 나온다.

SELECT ROW_NUMBER() OVER(PARTITION BY A.MIDX ORDER BY A.BIDX) AS RNUM, A.* FROM TESTBOARD A;

사용 예제2의 결과
midx가 같은 행에서 번호가 따로 생성된다.

'Oracle DB' 카테고리의 다른 글

LEFT JOIN, RIGHT JOIN, ROWNUM  (0) 2022.01.13
FOREIGN KEY, INNER JOIN, OUTER JOIN  (0) 2022.01.11
UNION  (4) 2022.01.08
DECODE, NVL, CASE  (2) 2022.01.07
서브쿼리, 시퀀스  (4) 2022.01.06