데이터베이스를 다루다 보면 특정 조건에 따라 순차적인 번호를 부여해야 할 때가 있다.

이번 포스팅에서는 SQL의 ROW_NUMBER() 함수를 사용하여 각 그룹 내에서 순차적인 번호를 부여하는 방법에 대해 알아보자.

 

예시 상황

다음과 같은 [구매내역] 테이블이 있다고 가정하자.

구매번호 아이템코드 구매일자 물품명 단가 수량
1001 A001 2024-01-01 노트북 1000 2
1001 A002 2024-01-01 마우스 50 1
1001 A001 2024-01-01 노트북 1000 1
1002 A003 2024-01-02 키보드 70 1
1002 A004 2024-01-02 모니터 200 2
1002 A003 2024-01-03 키보드 70 2

 

각 [구매번호]와 [아이템코드]내에서 순차적인 [항목번호]를 부여하고 싶다면, ROW_NUMBER() 함수를 사용하여 다음과 같이 쿼리를 작성할 수 있다.

SELECT 
    구매번호,
    아이템코드,
    구매일자,
    물품명,
    단가,
    수량,
    ROW_NUMBER() OVER (PARTITION BY 구매번호, 아이템코드 ORDER BY 구매번호, 아이템코드) AS 항목번호
FROM 구매내역
ORDER BY 구매번호, 아이템코드, 항목번호;

쿼리 설명

위 쿼리에서 ROW_NUMBER() OVER (PARTITION BY 구매번호, 아이템코드 ORDER BY 구매번호, 아이템코드) 부분이 핵심이다. 이 함수는 구매번호와 아이템코드별로 그룹을 만들고, 각 그룹 내에서 순차적인 번호를 부여한다.

 

  • PARTITION BY 구매번호, 아이템코드: 구매번호와 아이템코드가 같은 행끼리 하나의 그룹으로 묶는다.
  • ORDER BY 구매번호, 아이템코드: 그룹 내에서 정렬 기준을 지정. 여기서는 구매번호와 아이템코드를 기준으로 정렬.

 

쿼리 결과는 아래와 같다.

구매번호 아이템코드 구매일자 물품명 단가 수량 항목번호
1001 A001 2024-01-01 노트북 1000 2 1
1001 A001 2024-01-01 노트북 1000 1 2
1001 A002 2024-01-01 마우스 50 1 1
1002 A003 2024-01-02 키보드 70 1 1
1002 A003 2024-01-03 키보드 70 2 2
1002 A004 2024-01-02 모니터 200 2 1

 

이와 같이 ROW_NUMBER() 함수를 사용하면, 각 구매번호와 아이템코드 내에서 순차적인 항목번호를 쉽게 부여할 수 있다.


반응형