MySQL 행 번호 창 기능

Mysql Row Number Window Function



MySQL 내에서 ROW NUMBER() 메서드는 파티션 내부의 모든 행에 대한 시간순 번호를 포함합니다. 일종의 창 기능일 뿐입니다. 행 숫자는 파티션 내의 행 숫자와 함께 1에서 시작합니다. 버전 8.0 이전에는 MySQL이 ROW NUMBER() 함수를 허용하지 않았지만 이 기능을 모방하는 데 도움이 되는 세션 변수를 제공한다는 것을 기억하십시오. 이 가이드 전체에서 MySQL ROW NUMBER() 기능에 대해 더 많이 이해하고 결과 컬렉션의 모든 행에 대해 연속적인 숫자를 생성합니다. MySQL에서 ROW_NUMBER() 메서드는 다음 절 중 하나와 함께 사용됩니다.

  • Over() 절이 그 안에 사용됩니다.
  • ORDERS BY 절은 언급된 열의 정렬 순서에 따라 결과를 정렬합니다.

통사론:

>> 선택하다 col_name,ROW_NUMBER()위에( 분할 BY col_name, 주문 col_name) 같이 row_num 에서 table_name;

응용 프로그램에서 MySQL 명령줄 클라이언트 셸을 열고 암호를 입력하여 로그인해 보겠습니다.









행 번호 기능에 대한 작업을 시작하려면 새 테이블을 생성하거나 기본 테이블을 사용해야 합니다. 아래 이미지에서 볼 수 있듯이 스키마 데이터에 일부 레코드가 포함된 테이블 동물이 있습니다. SELECT 명령어를 사용하여 레코드를 가져옵니다.



>> 선택하다 * 에서 데이터 .동물;





예제 01: ORDER BY 절을 사용하는 ROW_NUMBER()

행 번호 함수의 몇 가지 예를 자세히 설명하기 위해 동일한 표를 사용합니다. ORDER BY 절만 사용하면서 ROW_NUMBER() 함수 다음에 Over()가 오는 예를 살펴보겠습니다. 열 가격 순서에 따라 행에 번호를 매기는 동안 모든 레코드를 가져왔습니다. 행의 번호를 저장할 열에 row_num이라는 이름을 지정했습니다. 그렇게 하기 위해 아래 명령어를 시도해보자.

>> 선택하다 *,ROW_NUMBER()위에( 주문 가격) 같이 row_num 에서 데이터 .동물;

위의 쿼리를 실행하면 Price 열의 정렬 순서에 따라 행에 숫자가 할당되었음을 알 수 있습니다. 일부 더 작은 가격이 열의 맨 위에 있어야 하고 그에 따라 정렬되어야 한다고 생각할 수 있습니다. 그러나 ORDER BY 절은 값을 정렬하기 위해 열의 첫 번째 숫자나 알파벳만 봅니다.



Age 열의 정렬 순서를 사용하면서 동일한 쿼리 다음에 ORDER BY 절을 실행해 보겠습니다. 출력은 Age 열에 따라 제공됩니다.

>> 선택하다 *,ROW_NUMBER()위에( 주문 나이) 같이 row_num 에서 데이터 .동물;

예제 02: PARTITION BY 절을 사용하는 ROW_NUMBER()

ROW_NUMBER() 쿼리에서 유일한 PARTITION BY 절을 사용하여 결과를 확인합니다. SELECT 쿼리를 사용하여 ROW_NUMBER() 및 OVER 절이 뒤따르는 레코드를 가져오면서 Color 열에 따라 테이블을 분할했습니다. 명령 셸에서 아래에 추가된 명령을 실행합니다.

>> 선택하다 *,ROW_NUMBER()위에( 분할 색상별) 같이 row_num 에서 데이터 .동물;

색상 정렬 순서에 따라 파티션에 행 번호가 할당된 것을 결과에서 확인할 수 있습니다. 4행을 사용하는 Black 색상에 대해 4개의 값이 있기 때문입니다. 그렇기 때문에 1에서 4까지 또는 그 반대로 시작하는 4개의 행 번호가 있습니다.

이번에는 성별 열로 파티션을 나눈 동일한 예를 시도합니다. 아시다시피 이 테이블에는 두 개의 성별만 있으므로 2개의 파티션이 형성됩니다. 암컷은 9개의 행을 차지하므로 1에서 9까지의 행 번호가 지정됩니다. 수컷은 8개의 값을 가지고 있기 때문에 1에서 8까지입니다.

>> 선택하다 *,ROW_NUMBER()위에( 분할 성별) 같이 row_num 에서 데이터 .동물;

예제 03: PARTITION BY 및 ORDER BY를 사용하는 ROW_NUMBER()

MySQL 명령줄에서 위의 두 가지 예제를 수행했습니다. 이제 MySQL Workbench 8.0에서 ROW_NUMBER() 예제를 수행할 차례입니다. 따라서 애플리케이션에서 MySQL Workbench 8.0을 엽니다. MySQL Workbench를 로컬 호스트 루트 데이터베이스와 연결하여 작업을 시작합니다.

MySQL Workbench의 왼쪽에는 스키마 표시줄이 있고 탐색기가 있습니다. 이 스키마 표시줄에서 데이터베이스 목록을 찾을 수 있습니다. 데이터베이스 목록 아래에는 아래 이미지에서 볼 수 있듯이 다른 테이블과 저장 프로시저가 있습니다. 데이터베이스 '데이터'에 다른 테이블이 있습니다. 쿼리 영역에서 SELECT 명령을 사용하여 'order1' 테이블을 열어 ROW_NUMBER() 함수 구현에 사용하기 시작합니다.

>> 선택하다 * 에서 데이터 .주문1;

아래와 같이 그리드 보기에 order1 테이블이 표시되었습니다. id, Region, Status 및 OrderNo의 4개 열 필드가 있는 것을 볼 수 있습니다. ORDER BY 및 PARTITION BY 절을 동시에 사용하는 동안 이 테이블의 모든 레코드를 가져옵니다.

MySQL Workbench 8.0의 쿼리 영역에 아래와 같은 쿼리를 입력합니다. 쿼리가 SELECT 절로 시작되어 OVER 절과 함께 ROW_NUMBER() 함수가 뒤따르는 모든 레코드를 가져옵니다. OVER 절 뒤에 이 테이블에 따라 테이블을 파티션으로 나누기 위해 PARTITION BY 문에 의해 진행되는 열 Status를 지정했습니다. ORDER BY 절을 사용하여 Region 열에 따라 테이블을 내림차순으로 정렬합니다. 행 번호는 row_num 열에 유지됩니다. 이 명령을 실행하려면 플래시 아이콘을 탭하십시오.

아래 표시된 결과가 표시됩니다. 우선, 테이블은 열 상태 값에 따라 두 부분으로 분리되었습니다. 그 후 'Region' 열의 내림차순으로 제시되었으며 파티션에는 행 번호가 할당되었습니다.

결론:

마지막으로 MySQL Workbench 및 MySQL Command-line Client Shell에서 ROW_NUMBER() 함수를 사용하는 데 필요한 모든 예제를 완료했습니다.