이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14301|회답: 1

[출처] Oracle에서 rownum과 row_number()의 차이점

[링크 복사]
게시됨 2017. 9. 25. 오후 4:00:21 | | |
row_number()over(col1로 분할, col2에 따라 정렬)는 그룹 내에서 col2에 따라 정렬하는 것을 의미하며, 이 함수로 계산된 값은 각 그룹이 내부적으로 정렬된 후 그룹 내 연속된 고유 번호(order number)를 나타냅니다. rownum과의 차이점은, 정렬할 때 rownum을 결과 집합에 조잡한 rownum을 추가한 후 정렬하는 반면, row_number()는 먼저 정렬한 후 정렬 절을 포함한 후 행 번호를 계산한다는 점입니다.

1. 오라클에서의 로우넘

쿼리에서 반환된 행에 번호를 매기는 데 사용되며, 첫 번째 행은 1, 두 번째 행은 2로 할당됩니다. 이 의사필드는 쿼리가 반환하는 총 행 수를 제한하는 데 사용할 수 있으며, rownum 앞에는 어떤 테이블의 이름도 붙일 수 없습니다.

1. 특정 값과 같은 쿼리 조건에 대한 rownum

학생 테이블에서 첫 번째 학생을 찾고 싶다면, 조건으로 rownum=1을 사용할 수 있습니다. 하지만 학생 테이블에서 두 번째 학생의 정보를 찾으려면 rownum=2를 사용하면 데이터를 찾을 수 없습니다. 로우넘은 1에서 시작하지만, 1 이상의 자연수는 로우넘이 예와 같다고 판단되면 거짓으로 간주되기 때문에 로우넘 = n(n>1 개의 자연수를 찾는 것은 불가능하다).




2. 특정 값보다 큰 쿼리 조건에 대한 Rownum

두 번째 행부터 레코드를 찾고 싶다면, rownum>2를 사용할 경우 레코드를 찾을 수 없으므로, 다음과 같은 하위 쿼리 방법을 사용하여 문제를 해결할 수 있습니다. 서브쿼리의 rownum은 반드시 별칭을 가져야 하며, 그렇지 않으면 레코드를 찾을 수 없습니다. rownum은 테이블의 열이 아니기 때문이며, 별칭이 없으면 rownum이 하위 쿼리의 열인지 메인 쿼리의 열인지 알 수 없습니다.




3. 특정 값보다 작은 쿼리 조건에 대한 rownum

세 번째 레코드의 이전 기록을 찾고 싶다면, rownum<3을 사용하면 두 개의 레코드를 얻을 수 있습니다. 분명히 rownum은 rownum < n(자연수 (n>1)의 조건이 참이라고 생각하므로 레코드를 찾을 수 있습니다.




4. 로우넘과 순서

Oracle의 rownum은 데이터를 가져올 때 생성되는 시퀀스 번호이므로, 지정된 정렬 데이터에 대해 rowmun 행 데이터를 지정하려면 반드시 주의를 기울여야 합니다.




로우넘 ID 이름
---------- ------ ---------------------------------------------------
3 200003 리산
2 200002 왕얼
장이 200001 1
4 200004 조스

다음과 같이 볼 수 있습니다rownum은 이름 열에서 생성되는 시퀀스 번호가 아닙니다。 시스템은 레코드 행 번호를 삽입된 순서대로 할당하며, 로이드도 순서대로 할당합니다. 이 문제를 해결하기 위해서는 서브쿼리를 사용해야 합니다




로우넘 ID 이름
---------- ------ ---------------------------------------------------
1 200003 리산
2 200002 왕얼
3 200001 장이
4 200004 조스

2. 오라클 row_number ()

1, row_number() 에 대해 (col_1[,col_2 ...]에 따른 순서)
col_1[,col_2 ...] 정렬은 정렬된 결과 집합을 반환하며, 각 행마다 다른 값을 반환합니다.

2, row_number() 위에 (col_n[,col_m ...] 순서로 분할 col_1[,col_2 ...])
첫째, col_n[,col_m ... 그룹화한 후, 각 그룹에 col_1[,col_2 ...] 정렬(오름차순)을 하고 마지막으로 정렬된 결과 집합을 반환합니다

Oracle row_number() 인스턴스

1. row_number() 함수를 사용하여 다음과 같은 숫자를 부여합니다.



원칙: 먼저 PSD로 정렬하고, 정렬 후 각 데이터 조각에 번호를 매기세요.

2. 주문을 가격 상승순으로 정렬하고, 각 레코드를 다음 코드로 정렬합니다:



3. 최근 각 고객이 넣은 주문 수를 세어보세요.




4. 오버와 같은 창 여는 함수를 사용할 때, 오버에서의 그룹화 및 정렬 실행이 "여기서 그룹, 집합, 순서 by" 실행보다 늦습니다.



위 코드는 먼저 where 절을 실행하고, 실행 후 각 레코드에 번호를 매깁니다.

3. row_number()와 로우넘의 차이점

rownum으로 정렬할 때는 결과 집합에 조잡한 rownum을 추가한 후 정렬하고, row_number()는 먼저 정렬한 후 정렬 절을 포함한 후 행 수를 계산합니다.




이전의:이번에는 순레이 완커 클라우드가 타오바오를 원숭이처럼 사용자들에게 크라우드펀딩하는 건가요?
다음:Oracle은 테이블의 모든 열과 그 데이터 유형을 조회합니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com