> 데이터 베이스 > MySQL 튜토리얼 > 오라클의 'PARTITION BY' 절은 'KEEP'이 있는 경우와 없는 경우 어떻게 다릅니까?

오라클의 'PARTITION BY' 절은 'KEEP'이 있는 경우와 없는 경우 어떻게 다릅니까?

Susan Sarandon
풀어 주다: 2024-12-21 00:45:10
원래의
662명이 탐색했습니다.

How Does Oracle's `PARTITION BY` Clause Differ with and without `KEEP`?

Oracle에서 KEEP이 있는 경우와 없는 경우의 PARTITION BY

소개

Oracle에서는 PARTITION BY 절은 집계 계산을 수행하기 위해 데이터 집합을 하위 집합으로 나누는 데 사용됩니다. KEEP 절은 각 파티션에서 유지할 행을 지정합니다. 이 기사에서는 KEEP이 있는 경우와 없는 경우의 PARTITION BY 사용 간의 차이점을 설명합니다.

KEEP이 있는 쿼리와 없는 쿼리

다음 두 쿼리를 고려하세요.

SELECT
    empno,
    deptno,
    sal,
    MIN(sal) OVER (PARTITION BY deptno) AS "Lowest",
    MAX(sal) OVER (PARTITION BY deptno) AS "Highest"
FROM
    empl;

SELECT
    empno,
    deptno,
    sal,
    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;
로그인 후 복사

첫 번째 쿼리는 KEEP 없이 PARTITION BY를 사용하고, 두 번째 쿼리는 KEEP을 사용합니다. (DENSE_RANK). 두 쿼리 모두 각 부서의 최저 급여와 최고 급여를 계산합니다.

KEEP (DENSE_RANK FIRST ORDER BY sal)

두 번째 쿼리에서 KEEP (DENSE_RANK FIRST ORDER BY sal) 절은 Oracle에게 급여 기준으로 오름차순으로 정렬한 후 각 부서의 첫 번째 행만 유지하도록 지시합니다. 주문하다. DENSE_RANK 함수는 각 파티션 내의 각 행에 순위를 할당하며 첫 번째 순위는 가장 낮은 급여를 나타냅니다.

쿼리 간의 차이

두 번째 쿼리는 중복됩니다. MIN 및 DENSE_RANK FIRST는 모두 동일한 sal 열에서 작동합니다. KEEP을 사용하지 않고 최저 급여를 직접 계산하는 첫 번째 쿼리와 동일한 결과가 생성됩니다.

이는 KEEP(DENSE_RANK FIRST ORDER BY sal) 절이 MIN 또는 MAX 집계가 다음과 같은 경우에만 유용하기 때문입니다. 순서 열과 다른 열에서 수행됩니다. 이러한 경우 KEEP 절을 사용하면 계산에 포함되는 행을 보다 구체적으로 제어할 수 있습니다.

다음 쿼리를 고려하세요.

SELECT
    name,
    sal,
    deptno,
    MIN(sal) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "Lowest",
    MIN(name) KEEP (DENSE_RANK FIRST ORDER BY sal) OVER (PARTITION BY deptno) AS "Lowest Employee"
FROM
    test;
로그인 후 복사

이 쿼리는 부서별 최저 급여와 최저 급여를 받은 직원의 이름을 함께 계산합니다. 이 경우에는 최저 급여가 동일한 행이 여러 개 있어도 최저 급여와 해당 직원 이름만 반환되므로 KEEP(DENSE_RANK FIRST ORDER BY sal) 절이 필요합니다.

위 내용은 오라클의 'PARTITION BY' 절은 'KEEP'이 있는 경우와 없는 경우 어떻게 다릅니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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