a창 토토 사이트현재 행과 관련된 일련의 테이블 행에서 계산을 수행합니다. 이것은 집계 함수로 수행 할 수있는 계산 유형과 비슷합니다. 그러나 창 토토 사이트로 인해 무리가 아닌 집계 호출과 같이 행이 단일 출력 행으로 그룹화되지 않습니다. 대신, 행은 별도의 정체성을 유지합니다. 무대 뒤에서 창 토토 사이트는 쿼리 결과의 현재 행보다 더 많이 액세스 할 수 있습니다.
다음은 각 직원의 급여를 부서의 평균 급여와 비교하는 방법을 보여주는 예입니다.
Depname, Empno, Salary, Avg (Salary) Over (Depname에 의한 파티션)를 선택하여 Empsalary;
depname | Empno | 급여 | avg -----------+-------+--------+------------------------- 개발 | 11 | 5200 | 5020.00000000000000 개발 | 7 | 4200 | 5020.00000000000000 개발 | 9 | 4500 | 5020.00000000000000 개발 | 8 | 6000 | 5020.00000000000000 개발 | 10 | 5200 | 5020.00000000000000 인원 | 5 | 3500 | 3700.00000000000000 인원 | 2 | 3900 | 3700.00000000000000 판매 | 3 | 4800 | 4866.666666666666667 판매 | 1 | 5000 | 4866.666666666666667 판매 | 4 | 4800 | 4866.666666666666667 (10 줄)
처음 3 개의 출력 열은 테이블에서 직접 나옵니다empsalary
, 테이블에 각 행마다 하나의 출력 행이 있습니다. 네 번째 열은 동일한 모든 테이블 행에서 찍은 평균을 나타냅니다.depname
현재 행으로 값. (이것은 실제로 비 창과 같은 기능입니다avg
집계이지만Over
조항은 창 토토 사이트로 취급되고 창 프레임을 가로 질러 계산합니다.)
창 토토 사이트 호출은 항상를 포함합니다.Over
창 토토 사이트의 이름과 인수에 따라 직접 조항. 이것은 구문 적으로 그것을 정상적인 함수 또는 비 창의 집계와 구별하는 것입니다. 그만큼Over
조항은 쿼리의 행이 창 토토 사이트에 의해 처리를 위해 어떻게 분할되는지 정확하게 결정합니다. 그만큼파티션 by
내부의 조항Over
행을 동일한 값의 값을 공유하는 그룹 또는 파티션으로 나누는파티션 by
표현. 각 행에 대해, 창 토토 사이트는 현재 행과 동일한 파티션으로 떨어지는 행에 걸쳐 계산됩니다.
당신은 또한 window 토토 사이트에 의해 행이 처리되는 순서를 제어 할 수도 있습니다.주문 by
내Over
. (창주문 by
행이 출력되는 순서와 일치 할 필요조차 없습니다.) 예는 다음과 같습니다..
Depname, Empno, Salary, RANK () OVER (Salary Desc의 Depname Order 별 파티션) empsalary에서;
Depname | Empno | 급여 | 계급 ----------+-------+--------+------ 개발 | 8 | 6000 | 1 개발 | 10 | 5200 | 2 개발 | 11 | 5200 | 2 개발 | 9 | 4500 | 4 개발 | 7 | 4200 | 5 인원 | 2 | 3900 | 1 인원 | 5 | 3500 | 2 판매 | 1 | 5000 | 1 판매 | 4 | 4800 | 2 판매 | 3 | 4800 | 2 (10 줄)
여기에 표시된대로RANK
토토 사이트는 각각의 별개의 숫자 순위를 생성합니다주문 by
현재 행 파티션의 값주문
조항RANK
행동이 전적으로 결정되기 때문에 명시적인 매개 변수가 필요하지 않습니다.Over
절.
창 토토 사이트로 고려되는 행은의 행입니다.“가상 테이블”쿼리에서 생성From
조항에 의해 필터링 된 조항여기서
, 그룹 by
및클로즈가있는 경우. 예를 들어, 행은를 충족하지 않기 때문에 제거되었습니다.
여기서
조건은 어떤 창 토토 사이트로도 보이지 않습니다. 쿼리에는 다른 방식으로 데이터를 다른 방식으로 슬라이스하는 여러 창 토토 사이트가 포함될 수 있습니다.Over
Clauses, 그러나 그들은 모두이 가상 테이블에 의해 정의 된 동일한 행 모음에 작용합니다.
우리는 이미 그것을 보았습니다주문 by
행 주문이 중요하지 않으면 생략 할 수 있습니다. 생략 할 수도 있습니다파티션 by
,이 경우 모든 행이 포함 된 단일 파티션이 있습니다.
창 토토 사이트와 관련된 또 다른 중요한 개념이 있습니다. 각 행마다 파티션 내에이라는 행이 있습니다.창 프레임. 일부 창 토토 사이트는 전체 파티션이 아닌 창 프레임의 행에서만 작용합니다. 기본적으로 if주문 by
제공됩니다. 프레임은 현재 행을 통해 파티션의 시작부터 모든 행으로 구성되며에 따라 현재 행과 동일한 행을 다음 행으로 구성합니다.주문 by
절. 언제주문 by
생략 됨 기본 프레임은 파티션의 모든 행으로 구성됩니다.[5]여기를 사용하는 예는입니다.Sum
:
empsalary에서 () 오버 ()를 선택한 급여, 금액 (급여) 선택;
급여 | 합집합 --------+------- 5200 | 47100 5000 | 47100 3500 | 47100 4800 | 47100 3900 | 47100 4200 | 47100 4500 | 47100 4800 | 47100 6000 | 47100 5200 | 47100 (10 줄)
위, 없기 때문에주문 by
inOver
절, 조항, 창 프레임은 파티션과 동일하며파티션 by
전체 테이블입니다. 다시 말해 각 합계는 전체 테이블을 통해 취해 지므로 각 출력 행에 대해 동일한 결과를 얻습니다. 그러나 우리가 추가하면주문 by
조항, 우리는 매우 다른 결과를 얻습니다 :
empsalary의 급여, 금액 (급여)을 선택하십시오.
급여 | 합집합 --------+------- 3500 | 3500 3900 | 7400 4200 | 11600 4500 | 16100 4800 | 25700 4800 | 25700 5000 | 30700 5200 | 41100 5200 | 41100 6000 | 47100 (10 줄)
여기에서 합계는 현재의 복제물을 포함하여 현재의 첫 급여에서 가져옵니다 (복제 된 급여의 결과에 대한 참조)..
창 토토 사이트는에서만 허용됩니다.select
목록 및주문 by
쿼리 조항. in in과 같은 다른 곳에서는 금지되어 있습니다.그룹 by
, and
여기서
조항. 이 조항을 처리 한 후 논리적으로 실행되기 때문입니다. 또한 창 토토 사이트는 비 독사 집계 기능 후에 실행됩니다. 이것은 창 토토 사이트의 인수에 집계 함수 호출을 포함시키는 것이 유효하지만 그 반대는 아닙니다.
창 계산이 수행 된 후 필터 또는 그룹 행이 필요하다면 하위 선택을 사용할 수 있습니다. 예를 들어:
Depname, Empno, Salary, enroll_date를 선택하십시오 에서 (Depname, Empno, Salary, enroll_date, rank () Over (POS로서 DEPNAME ORDER에 의한 분할) POS로 empsalary에서 ) SS로서 여기서 pos <3;
위의 쿼리는 내부 쿼리의 행만 표시RANK
3보다 작습니다.
쿼리에 여러 개의 창 토토 사이트가 포함되면 별도의 각각을 쓸 수 있습니다Over
조항이지만, 여러 기능에 대해 동일한 창 동작이 원하는 경우 이는 복제적이고 오류가 발생하기 쉽습니다. 대신, 각 윈도우 동작은 A에서 이름을 지정할 수 있습니다.창
절과 참조Over
. 예를 들어:
W에서 W, AVG (급여)를 통해 합 (급여)을 선택하십시오 empsalary에서 Window W as (Salary Desc의 Depname Order에 의한 파티션);
창 토토 사이트에 대한 자세한 내용은 찾을 수 있습니다.섹션 4.2.8, PostgreSQL : 문서 : 17 : 9.22. 창 스포츠 토토, 섹션 7.2.5및select참조 페이지.
문서에 맞지 않는 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 귀하의 경험 또는 추가 설명이 필요합니다. 사용이 양식문서 문제를보고하려면