rownum 예제

당신이 MySQL 서버를 사용하는 경우, 여기에 동등한 예입니다 – 이것은 우리가 파티션 수준에서 Top-N 쿼리를 작성할 수 있습니다. 다음 예제에서는 관계를 무시하고 각 부서에서 최고의 급여를 받는 사람을 다시 가져옵니다. ROW_NUMBER와 RANK는 비슷합니다. ROW_NUMBER는 모든 행을 순차적으로 번호로 합니다(예: 1, 2, 3, 4, 5). RANK는 동점에 대해 동일한 숫자 값을 제공합니다(예: 1, 2, 2, 4, 5). skijump_results 표에서 2014 소치 올림픽 남자 노멀 힐 개인 스키 점프 결과를 살펴보겠습니다. skijump_results 테이블에 인덱스가 없습니다. 다음 쿼리는 맨 위 및 페이지 부여 쿼리의 예이며 이 문서의 다음 부분에서 사용할 것입니다. 참고 – 모든 데이터베이스는 TOP 절을 지원하지 않습니다. 예를 들어 MySQL은 제한된 수의 레코드를 가져오기 위해 LIMIT 절을 지원하는 반면 오라클은 ROWNUM 명령을 사용하여 제한된 수의 레코드를 가져옵니다. ROWNUM을 사용하여 이 예제에서와 같이 쿼리에서 반환되는 행 수를 제한할 수 있습니다.

예를 들어 이 쿼리는 행을 반환하지 않습니다: 다음 쿼리는 CUSTOMERS 테이블에서 상위 3개 레코드를 가져오는 SQL 서버의 예입니다. ORDER BY 절이 동일한 쿼리에서 ROWNUM을 따르는 경우 행은 ORDER BY 절에 의해 다시 정렬됩니다. 결과는 행에 액세스하는 방식에 따라 달라질 수 있습니다. 예를 들어 ORDER BY 절로 인해 오라클이 인덱스를 사용하여 데이터에 액세스하는 경우 Oracle은 인덱스가 없는 행과 다른 순서로 행을 검색할 수 있습니다. 따라서 다음 명령문은 위의 예제와 동일한 영향을 미치지 않습니다. 하위 쿼리가. 이 예에서와 같이 ROWNUM을 사용하여 테이블의 각 행에 고유한 값을 할당할 수도 있습니다. 다른 분석 함수와 달리 창 절을 지원하지 않습니다. OVER 절에서 분할 절을 생략하면 전체 결과 집합이 단일 파티션으로 처리됩니다. 다음 예제에서는 급여(최저에서 가장 높은 직원)를 기준으로 각 직원에게 고유한 행 번호를 할당합니다. 이 예제에는 RANK 및 DENSE_RANK가 포함되어 관계 처리 방식의 차이를 보여 준다. 하위 쿼리에 ORDER BY 절을 포함하고 ROWNUM 조건을 최상위 쿼리에 배치하는 경우 행 순서 지정 후 ROWNUM 조건을 강제로 적용할 수 있습니다.

예를 들어 다음 쿼리는 가장 작은 직원 번호 10명으로 직원을 반환합니다. 이를 최상위 N 보고라고도 합니다. 분석 함수, 다른 한편으로는, 2001 년 오라클 9i에 도입 된 – 다음과 같은 기록을 갖는 고객 테이블을 고려하십시오. Y2K는 이미 그 때까지의 역사였고, 두려워할 것이 없었고, ROW_NUMBER는 그렇게 효율적이지 않은 방식으로 구현되었습니다.

¡Contactanos!