본문 바로가기
DB/ORACLE

[ORACLE] 특정 컬럼 기준으로 중복데이터 제거 (ROW_NUMBER() OVER(PARTITION BY _ ORDER BY _))

by madinthe90 2023. 5. 3.
반응형

 

1. ROW_NUMBER 함수 : ROW_NUMBER() OVER(PARTITION BY _ ORDER BY _)

PATITION 으로 컬럼을 그룹핑하고 정렬하여 순번을 지정해 주는 함수이다

 

- 사용법

ROW_NUMBER() OVER(PARTITION BY [그룹핑할 컬럼] ORDER BY [정렬할 컬럼] [ASC/DESC])

 

2. 특정 컬럼 기준으로 하나의 행만 추출하기

- 테이블 구성

일별 구매 사용처 내역

 

- 각 구매 내역(BUY_NAME) 별 최근 날짜 내역 조회 쿼리

SELECT 	 
	 BUY_NAME 
	,BUY_PRICE 
	,BUY_DATE  
FROM(
	-- 1) ROW_NUMBER 사용하여 구매내역별 일자 내림차순으로 순번 지정
	SELECT
		 BUY_NAME 
		,BUY_PRICE 
		,BUY_DATE 
		,ROW_NUMBER() OVER(PARTITION BY BUY_NAME ORDER BY BUY_DATE DESC) AS RN
	FROM BUY_TABLE
	-- 1) END
)
WHERE RN = 1	-- 2) RN 이 1인, 순번이 1번인 행만 조회
ORDER BY BUY_NAME

- SQL 설명

1) 구매 사용처(BUY_NAME) 별 그룹핑하여, 구매 일자(BUY_DATE)가 최근인 순서로 순번(RN)을 지정한다.

- 1) 의 결과

 

2) 위의 결과에서 RN 이 1인 행만 가져온다.

 

- 최종 결과

 

반응형

댓글