ROW_NUMBER()는 MySQL 8.0 버전부터 도입된 기능으로, 대표적인 윈도우 함수(Window Function) 중 하나입니다. 이 함수는 쿼리 결과의 각 행에 순차적인 일련번호를 부여할 때 사용됩니다. 이해를 돕기 위해 CREATE 명령어로 테이블을 먼저 만들어 보겠습니다.
테이블 생성하기
mysql> CREATE table rowNumberDemo -> ( -> FirstName varchar(100) -> ); Query OK, 0 rows affected (0.92 sec)
레코드 삽입하기
다음으로 INSERT 문을 사용하여 샘플 데이터를 입력합니다.
mysql> INSERT into rowNumberDemo values('john');
Query OK, 1 row affected (0.17 sec)
mysql> INSERT into rowNumberDemo values('john');
Query OK, 1 row affected (0.29 sec)
mysql> INSERT into rowNumberDemo values('Bob');
Query OK, 1 row affected (0.13 sec)
mysql> INSERT into rowNumberDemo values('Smith');
Query OK, 1 row affected (0.17 sec)저장된 데이터 확인하기
SELECT 문을 활용하면 테이블에 저장된 모든 레코드를 조회할 수 있습니다.
mysql> SELECT * from rowNumberDemo;
실행 결과는 다음과 같습니다.
+-----------+ | FirstName | +-----------+ | john | | john | | Bob | | Smith | +-----------+ 4 rows in set (0.00 sec)
ROW_NUMBER()로 행 번호 부여하기
이제 ROW_NUMBER() 함수를 사용하여 모든 레코드에 증가하는 순번을 부여해 보겠습니다. OVER 절 안에 ORDER BY를 함께 작성하면 정렬 기준에 따라 번호가 매겨집니다.
mysql> SELECT row_number() over ( order by firstName) RowNumberSqeuence,FirstName from rowNumberDemo -> order by FirstName;
실행 결과는 아래와 같습니다.
+-------------------+-----------+ | RowNumberSqeuence | FirstName | +-------------------+-----------+ | 1 | Bob | | 2 | john | | 3 | john | | 4 | Smith | +-------------------+-----------+ 4 rows in set (0.00 sec)
출력 결과를 보면 이름을 기준으로 오름차순 정렬한 상태에서 각 레코드에 1부터 시작하는 고유한 순번이 차례대로 부여된 것을 확인할 수 있습니다. 이처럼 ROW_NUMBER()는 결과 집합 내에서 각 행의 순서를 명확하게 식별해야 하는 경우, 예를 들어 페이징 처리나 순위 계산 등에 유용하게 활용됩니다.