Oracle에서 KEEP이 있거나 없는 PARTITION BY
Oracle의 PARTITION BY 절을 사용하면 테이블의 행을 그룹화하고 집계 함수를 수행할 수 있습니다. 그 그룹에. KEEP 절을 PARTITION BY 절과 함께 사용하면 집계 함수를 계산할 때 유지할 행을 지정할 수 있습니다.
다음 두 쿼리를 고려하세요.
SELECT empno, deptno, sal, MIN(sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) OVER (PARTITION BY deptno) "Highest" FROM empl SELECT empno, deptno, sal, MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) "Lowest", MAX(sal) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) "Highest" FROM empl
두 쿼리 모두 동일한 결과를 얻으려면 각 부서의 최저 급여와 최고 급여를 계산합니다. 그러나 두 쿼리에는 미묘한 차이가 있습니다.
첫 번째 쿼리에서는 각 파티션의 모든 행에 MIN 및 MAX 함수가 적용됩니다. 두 번째 쿼리에서는 KEEP 절을 사용하여 각 파티션의 첫 번째 행과 마지막 행만 계산에 포함되도록 지정합니다.
KEEP 절은 모든 집계 함수와 함께 사용할 수 있습니다. 행 집합에서 값이 처음 또는 마지막으로 나타나는 경우에 특히 유용합니다.
예를 들어 다음 쿼리는 각 부서에서 급여가 가장 높은 직원의 이름과 성을 찾습니다. :
SELECT empno, deptno, sal, MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "First Highest Salary", MAX(name) KEEP (DENSE_RANK LAST ORDER BY sal) OVER (PARTITION BY deptno) AS "Last Highest Salary" FROM empl GROUP BY deptno
KEEP 절을 사용하여 성능을 최적화할 수도 있습니다. 각 파티션의 첫 번째 또는 마지막 행만 계산에 포함되도록 지정하면 데이터베이스에서 처리해야 하는 데이터 양을 줄일 수 있습니다. 이는 특히 대규모 데이터 세트로 작업하는 경우 쿼리 성능을 향상시킬 수 있습니다.
위 내용은 'KEEP' 절은 Oracle 집계 함수의 'PARTITION BY'에 어떤 영향을 미치나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!