IT/ORACLE

[ORACLE] ROW_NUMBER() 중복되는데이터는 하나로 처리하기 (그룹별로 순번을 지정하여 하나의 행만 추출)

나콘 2023. 6. 30. 17:46

 ROW_NUMBER() OVER (PARTITION BY   ~

그룹별로 순번을 지정하여 하나의 행만 추출 

 

 

 

 

ROW_NUMBER() 함수

SQL에서 사용되는 윈도우 함수(window function) 중 하나이다 

윈도우 함수는 테이블의 행들에 대해 계산을 수행하고, 결과 집합에 추가적인 정보를 제공하는 특별한 함수이다 

 

ROW_NUMBER() 함수는 각 행에 일련 번호를 할당된다 

이 번호는 정렬 순서에 따라 할당되며, 일반적으로 정렬 기준은 ORDER BY 구문을 통해 지정된다

 


 

ex>  다음 쿼리는 고객별로(customer_id)별로 최근 주문 (order)의 인련번호를 확일 할 수 있다.

orders테이블  -  order(주문)에 대한 정보를 가지고있는 테이블

 

 

SELECT order_id, customer_id, order_date,
ROW_NUMBER() OVER(
                         PARTITION BY customer_id ORDER BY order_date DESC) AS rn

FROM orders;

 

 

 

>실행후 

ROW_NUMBER() 함수를 사용하여 rn 열을 추가한다 

(ROW_NUMBER() 함수를 사용하여 번호를 할당할 때, 그룹 내에서 정렬 순서에 따라 번호를 부여하게 된다 .
따라서
ROW_NUMBER() 함수를 사용하면 각 그룹의 첫 번째 행부터 시작하여 순서대로 번호가 부여된다.)

PARTITION BY customer_id 구문을 사용하여 각 고객(customer)별로 그룹을 만들고,

ORDER BY order_date DESC 구문을 사용하여 주문일(order_date)을 내림차순으로 정렬합니다.

 

 


 

ex>  oders테이블에서 고객별로 가장 최근 날짜로 주문한  정보 보여주기  

 

SELECT A.* 
               FROM (
                
SELECT order_id, customer_id,order_date, ROW_NUMBER() OVER (
                                PARTITION BY customer_id ORDER BY order_date DESC) AS rn 
                                   FROM orders ) A
 WHERE A.rn = 1;

 

 

 

>실행후

order_id 6는 customer_id 101의 가장 최근 주문을 나타내며, 해당 주문은 2022년 4월 1일(order_date)에 발생

order_id 5는 customer_id 102의 가장 최근 주문을, 해당 주문은 2022년 3월 10일에 발생

order_id 4는 customer_id 103의 가장 최근 주문을 나타내며, 해당 주문은 2022년 3월 5일에 발생

반응형