행 번호 함수는 다음을 사용하여 파티션에서 정렬된 순서대로 각 파티션의 행에 행 번호를 할당하는 데 사용되는 창 함수 중 하나입니다. 분할 절, PARTITION만 주문하다 절은 OVER 절 내부에서 사용될 수 있습니다. 이 경우 전체 테이블이 하나의 파티션으로 간주됩니다. 그러나 ORDER BY 절은 다음을 사용하는 데 필수입니다. ROW_NUMBER() 함수는 파티션의 행을 해당 논리적 순서로 정렬하고 나중에 ROW_NUMBER() 함수가 행 번호를 할당할 수 있기 때문입니다. 각 파티션에서 행 번호는 1부터 시작합니다.
통사론:
ROW_NUMBER( )
OVER ( [ PARTITION BY col_1,col_2… ] ORDER BY col_3,col_4.. ASC 또는 DESC) AS 컬럼_이름
ROW_NUMBER() 함수의 구성 요소
- 파티션 기준: 이는 행을 창으로 분할하는 주요 하위 절이며, 각 행에 대한 값은 다음과 같습니다. 창 기능 적용하여 계산됩니다.
- 주문: 이는 파티션의 행을 정렬하는 데 사용되며 기본적으로 오름차순입니다. ORDER BY 절이 없으면 ROW_NUMBER() 함수가 작동하지 않습니다.
- 반환 유형: ROW_NUMBER() 함수의 반환 유형은 BIGINT입니다.
ROW_NUMBER() 함수의 사용법
1 단계: 다음 SQL 쿼리를 사용하여 Geeksforgeeks 데이터베이스를 만듭니다.
질문
CREATE DATABASE Geeksforgeeks>
GFG 데이터베이스를 사용하세요.
질문
USE techcodeview.com>
3단계: 다양한 섹션의 학생들이 총점 500점 만점인 테이블을 만듭니다.
질문
CREATE TABLE studentsSectionWise( studentId INT, studentName VARCHAR(100), sectionName VARCHAR(50), studentMarks INT );>
4단계: 테이블에 행을 삽입하십시오.
질문
INSERT INTO studentsSectionWise VALUES (1, 'Geek1','A',461), (1, 'Geek2','B',401), (1, 'Geek3','C',340), (2, 'Geek4','A',446), (2, 'Geek5','B',361), (2, 'Geek6','C',495), (3, 'Geek7','A',436), (3, 'Geek8','B',367), (3, 'Geek9','C',498), (4, 'Geek10','A',206), (4, 'Geek11','B',365), (4, 'Geek12','C',485), (5, 'Geek13','A',446), (5, 'Geek14','B',368), (5, 'Geek15','C',295), (6, 'Geek16','C',495);>
5단계: 테이블을 확인하세요
SELECT * FROM studentsSectionWise>
산출:

학생섹션와이즈 테이블
이진 트리 자바
ROW_NUMBER() 함수와 함께 ORDER_BY 절 사용
단순히 ORDER BY 절을 오름차순 또는 내림차순으로 사용하면 전체 테이블이 하나의 파티션으로만 간주됩니다.
모든 섹션을 포함하여 ORDER BY 절과 함께 ROW_NUMBER() 함수를 사용하여 학생의 순위를 확인해 보겠습니다.
SELECT * , ROW_NUMBER() OVER ( ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
설명: 쿼리에서 우리는 DESC 순서로 정렬된 StudentsMarks와 함께 ORDER BY 절을 사용했습니다.
산출:

산출
설명: 결과에서 우리는 전체 테이블이 단일 파티션으로 간주되고 RankNumber 번호가 내림차순으로 StudentsMarks와 함께 증가하는 순서임을 알 수 있습니다.
ROW_NUMBER() 함수와 함께 PARTITION_BY 사용
단순히 PARTITION BY 절을 사용하여 테이블을 열 이름에 따라 다른 파티션으로 나누고 오름차순 또는 내림차순으로 ORDER BY 절을 사용하면 전체 테이블을 하나의 파티션으로만 간주합니다. 그리고 ROW_NUMBER()는 각 파티션에서 1부터 시작하는 고유번호를 각각 함수화합니다.
PARTITION BY 및 ORDER BY 절과 함께 ROW_NUMBER() 함수를 사용하여 순위 섹션을 확인해 보겠습니다.
SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise;>
설명: 우리가 사용한 쿼리에서 PARTITION BY 절 DESC에서 주문된 StudentsMarks를 사용하여 sectionName 현명한 및 ORDER BY 절에서 테이블을 분할합니다.
산출:

산출
설명: 결과에서 우리는 sectionName으로 분할된 파티션을 볼 수 있으며, 각 파티션에서 학생은 DESC 순서로 Studentmark를 기준으로 정렬됩니다. ROW_NUMBER() 함수는 각 파티션에서 시작하여 증가하는 행 번호를 할당합니다. .
PARTITION BY 없이 ROW_NUMBER() 이해하기
SQL Server의 ROW_NUMBER() 함수는 결과 집합의 각 행에 고유한 행 번호를 제공할 수 있는 유연한 도구입니다. 파티션 내에서 그룹화 및 순위 지정을 위해 PARTITION BY 절과 함께 자주 사용되지만 PARTITION BY 절 없이 사용할 경우에도 동일하게 효과적입니다. 이 문서에서는 PARTITION BY 절 없이 ROW_NUMBER()를 사용할 수 있는 가능성과 사용법에 대해 설명합니다.
통사론:
선택하다
ROW_NUMBER() 이상 ( 주문 YourOrderByColumn) 처럼 행번호,
기타열
에서
귀하의 테이블 이름;
PARTITION BY, ORDER BY 절 없이 ROW_NUMBER() 함수를 이용하여 순위 구간을 확인해 보겠습니다.
SELECT * , ROW_NUMBER() OVER (ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise>
산출:

산출
ROW_NUMBER()를 사용하여 행의 하위 집합 가져오기
ROW_NUMBER() 함수는 데이터 페이지 매기기의 경우 유용할 수 있는 CTE를 사용하여 테이블에서 행의 하위 집합을 가져오는 데 사용할 수 있습니다.
각 클래스의 상위 2위 랭커를 확인해보세요. CTE(공통 테이블 표현식) ROW_NUMBER() 함수 사용:
WITH topTwoRankers AS ( SELECT * , ROW_NUMBER() OVER (PARTITION BY sectionName ORDER BY studentMarks DESC) AS rankNumber FROM studentsSectionWise ) SELECT * FROM topTwoRankers WHERE rankNumber <=2;>
설명: 여기 쿼리에서는 CTE 표현식을 사용하여 위에 사용된 쿼리에서 임시 테이블을 가져왔고 외부 SELCT 쿼리를 사용하여 순위가 2보다 작거나 같은 학생을 가져왔습니다.
산출:

산출
설명: 결과에서 이전 예에 표시된 쿼리에서 얻은 테이블의 하위 집합인 각 섹션의 상위 2개 순위가 있음을 알 수 있습니다.
장점ROW_NUMBER()>
PARTITION BY 사용
- 고급 파티션 순위를 허용합니다.
- 특정 그룹 내에서 고유한 행 번호 매기기를 활성화합니다.
- 광범위한 분석이 필요한 상황에서 더 큰 유연성을 허용합니다.
장점ROW_NUMBER()>
PARTITION BY 없이
- 간단하고 간단합니다.
- 특정 열에 따라 항목의 순위를 간단하게 지정할 수 있습니다.
- 특히 작은 결과 세트의 경우 더 나은 성능을 제공할 수 있습니다.
결론
파티션을 기반으로 순서를 지정하고 필요한 작업을 수행하려는 경우 매우 유용합니다. 사용 ORDER BY 절 ROW_NUMBER() 함수를 사용하는 동안 필수입니다. 또한 CTE를 사용하여 정렬된 파티션에서 테이블의 하위 집합을 가져올 수 있습니다. ROW_NUMBER()의 주요 사용 사례는 데이터 분석 목적에 매우 유용한 다양한 파티션을 기반으로 행 순위를 지정하는 것입니다.