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

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

Mary-Kate Olsen
풀어 주다: 2025-01-05 04:06:44
원래의
231명이 탐색했습니다.

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

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

Oracle에서 PARTITION BY 절을 사용하면 목적에 따라 데이터를 고유한 그룹으로 분할할 수 있습니다. 집계 함수를 적용하는 것입니다. 성능 최적화나 논리적 그룹화를 위해 데이터를 분할하는 것이 유용한 경우가 많습니다.

PARTITION BY 절은 KEEP 키워드와 함께 또는 없이 사용할 수 있습니다. KEEP을 사용하지 않으면 전체 파티션이 집계에 사용됩니다. 반면, KEEP을 사용하면 특정 조건을 만족하는 행만 유지되어 집계됩니다.

차이점을 설명하기 위해 다음 두 쿼리를 살펴보겠습니다.

KEEP이 없는 쿼리 1 :

SELECT deptno, MIN(sal) OVER (PARTITION BY deptno) AS "Lowest", MAX(sal) OVER (PARTITION BY deptno) AS "Highest"
FROM empl
로그인 후 복사

KEEP을 사용한 쿼리 2:

SELECT deptno, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Highest"
FROM empl
로그인 후 복사

쿼리 2에서는 KEEP 절을 활용하여 각 부서의 첫 번째 및 마지막 순위 급여만 반환합니다(DENSE_RANK 함수 사용). 전체적인 효과는 중복된 값을 제거하고 뚜렷한 최소 및 최대 급여를 제공하는 것입니다.

자세히 설명:

  • OVER (PARTITION BY deptno): deptno 열을 기준으로 한 데이터입니다.
  • ORDER BY sal: 급여별로 각 파티션 내의 행을 오름차순으로 정렬합니다.
  • KEEP (DENSE_RANK FIRST): 각 파티션의 첫 번째 순위 행만 유지합니다. DENSE_RANK 함수는 동일한 순위를 공유하는 동일한 값을 사용하여 고유한 연속 순위를 행에 할당합니다.
  • MIN(sal): 각 파티션 내에서 유지된 행에 대한 최소 급여를 계산합니다.
  • MAX(sal): 각 행에 유지된 행의 최대 급여를 계산합니다.

두 번째 쿼리에서는 MIN 및 DENSE_RANK FIRST가 sal 열에 적용되어 동일한 동작이 발생합니다. 따라서 이 시나리오에서는 KEEP 절이 중복됩니다. 그러나 이름과 같이 최소값을 계산하는 데 다른 열이 사용된 경우 KEEP 절이 관련됩니다.

예:

MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno)
로그인 후 복사

이 쿼리는 다음에 해당하는 이름을 반환합니다. 동일한 최저 급여와 관련된 중복 이름을 제외하고 각 부서의 최저 급여.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿