logo

MySQL ROW_NUMBER() 함수

MySQL의 ROW_NUMBER() 함수는 다음을 반환하는 데 사용됩니다. 일련번호 파티션 내의 각 행에 대해. 일종의 윈도우 기능이다. 행 번호는 1부터 시작하여 파티션에 있는 행 수까지입니다.

MySQL은 버전 8.0 이전에는 ROW_NUMBER() 함수를 지원하지 않지만 세션 변수 이를 통해 이 기능을 에뮬레이트할 수 있습니다.

통사론

ROW_NUMBER()를 사용하기 위한 기본 구문은 다음과 같습니다. MySQL :

이진 트리의 예
 ROW_NUMBER() OVER ( ) 

예제를 사용하여 설명해 보겠습니다. .

먼저 '라는 이름의 테이블을 생성하겠습니다. 사람 ' 아래 명령문을 사용합니다.

 CREATE TABLE Person ( Name varchar(45) NOT NULL, Product varchar(45) DEFAULT NULL, Country varchar(25) DEFAULT NULL, Year int NOT NULL ); 

다음으로 이 테이블에 값을 추가해야 합니다. 아래 명령문을 실행합니다.

 INSERT INTO Person(Name, Product, Country, Year) VALUES ('Stephen', 'Computer', 'USA', 2015), ('Joseph', 'Laptop', 'India', 2016), ('John', 'TV', 'USA', 2016), ('Donald', 'Laptop', 'England', 2015), ('Joseph', 'Mobile', 'India', 2015), ('Peter', 'Mouse', 'England', 2016); 

그런 다음 SELECT 문을 실행하여 레코드를 표시합니다.

자바의 정적 함수
 mysql> SELECT * FROM Person; 

아래와 같이 출력이 표시됩니다.

연도를 분기로
MySQL ROW_NUMBER() 함수

이제 ROW_NUMBER() 함수를 사용하여 아래 명령문을 사용하여 각 레코드에 대한 시퀀스 번호를 할당할 수 있습니다.

 SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person; 

다음과 같은 출력이 제공됩니다.

MySQL ROW_NUMBER() 함수

이번에도 ROW_NUMBER() 함수를 사용하여 아래 명령문을 사용하여 파티션 내의 각 레코드에 대한 시퀀스 번호를 할당할 수 있습니다.

 SELECT *, ROW_NUMBER() OVER(PARTITION BY Year) AS row_num FROM Person; 

연도(2015년과 2016년)를 기준으로 두 개의 파티션이 발견되면 아래와 같은 출력이 제공됩니다.

리디마 티와리
MySQL ROW_NUMBER() 함수

세션 변수를 사용하는 MySQL ROW_NUMBER()

세션 변수를 사용하여 행 번호를 오름차순으로 추가하는 ROW_NUMBER() 함수를 에뮬레이트할 수 있습니다.

1부터 시작하는 각 행의 행 번호를 추가하는 아래 문을 실행합니다.

 SET @row_number = 0; SELECT Name, Product, Year, Country, (@row_number:=@row_number + 1) AS row_num FROM Person ORDER BY Country; 

이 명령문에서는 먼저 세션 변수를 지정했습니다. @row_number @prfix로 표시하고 해당 값을 0으로 설정합니다. 그런 다음 Person 테이블에서 데이터를 선택하고 @row_number 변수의 값을 각 행마다 1씩 늘립니다.

쿼리가 성공적으로 실행되면 아래와 같은 출력이 표시됩니다.

MySQL ROW_NUMBER() 함수

이번에도 세션 변수를 테이블로 사용하고 다음 명령문을 사용하여 소스 테이블과 교차 조인하겠습니다.

 SELECT (@row_number:=@row_number + 1) AS row_num, Name, Country, Year FROM Person, (SELECT @row_number:=0) AS temp ORDER BY Year; 

우리는 아래와 같은 출력을 얻게 될 것입니다:

MySQL ROW_NUMBER() 함수