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

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

Linda Hamilton
풀어 주다: 2024-12-29 21:06:21
원래의
381명이 탐색했습니다.

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

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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