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 함수 사용). 전체적인 효과는 중복된 값을 제거하고 뚜렷한 최소 및 최대 급여를 제공하는 것입니다.
자세히 설명:
두 번째 쿼리에서는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!