>데이터 베이스 >MySQL 튜토리얼 >'KEEP' 절은 Oracle의 'PARTITION BY' 집계 함수에 어떤 영향을 미치나요?

'KEEP' 절은 Oracle의 'PARTITION BY' 집계 함수에 어떤 영향을 미치나요?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-21 09:35:10314검색

How Does the `KEEP` Clause Affect `PARTITION BY` Aggregate Functions in Oracle?

Oracle에서 KEEP이 있거나 없는 PARTITION BY

Oracle의 PARTITION BY 절을 사용하면 사용자가 지정된 열을 기반으로 테이블의 행을 그룹화할 수 있습니다. 집계 계산용. 경우에 따라 KEEP 절을 PARTITION BY와 함께 사용하여 각 파티션 내의 개별 행 보존을 제어할 수 있습니다.

KEEP 구문:

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)

이 구문에서는 KEEP 절 뒤에 DENSE_RANK FIRST가 옵니다. 이는 급여가 가장 낮은 행이 각 절 내에 유지되어야 함을 나타냅니다. 파티션. DENSE_RANK는 연속 순위를 보장합니다. 즉, 급여가 동일한 행이 동일한 순위를 갖게 됩니다.

KEEP이 없는 구문:

MIN(sal) OVER (PARTITION BY deptno)

이 구문에서는 KEEP 절이 생략됩니다. . KEEP이 없으면 각 파티션 내의 모든 행이 집계 계산에 고려되므로 동일한 값을 가진 여러 행이 결과에 포함될 수 있습니다.

차이점:

두 쿼리의 주요 차이점은 다음과 같습니다.

  • KEEP 사용 시: 각 부서 내 급여가 가장 낮은 행만 결과에 포함됩니다.
  • KEEP 제외: 각 부서 내 모든 행이 결과에 포함되므로 최소 급여 값이 중복될 수 있습니다.

중복 유지:

제공된 항목에서 예를 들어, MIN 함수가 동일한 열(sal)에도 적용되므로 KEEP 절은 중복됩니다. 결과적으로 급여를 기준으로 첫 번째 순위 행은 항상 급여가 가장 낮은 행이 됩니다.

다른 순서 열의 예:

그러나 다른 경우 ordering 열은 KEEP 절에 사용되며 다른 효과를 가질 수 있습니다.

MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY name) OVER (PARTITION BY deptno)

이 경우 다음이 포함된 행 동일한 순서(이름)를 가진 사람들 중 가장 낮은 급여가 각 파티션 내에 유지됩니다. 이를 통해 사용자는 각 부서 내에서 특정 이름을 가진 직원의 최저 급여를 선택할 수 있습니다.

위 내용은 'KEEP' 절은 Oracle의 'PARTITION BY' 집계 함수에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.