젠 토토 : 문서 : 9.6 : 젠 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.6 : 토토 사이트 | 무지개 토토 : 문서 : 9.6 : 고급 기능 | 3 장. 고급 기능 | 스포츠 토토 베트맨 : 문서 : 9.6 : 상속 |
A창 스포츠 토토 결과현재 행과 관련된 일련의 테이블 행에서 계산을 수행합니다. 이것은 집계 함수로 수행 할 수있는 계산 유형과 비슷합니다. 그러나 일반 집계 함수와 달리 창 스포츠 토토 결과를 사용하면 행이 단일 출력 행으로 그룹화되지 않습니다. 행은 별도의 ID를 유지합니다. 무대 뒤에서 창 스포츠 토토 결과는 쿼리 결과의 현재 행보다 더 많이 액세스 할 수 있습니다.
다음은 각 직원의 급여를 부서의 평균 급여와 비교하는 방법을 보여주는 예입니다.
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값,주문 by조항RANK
행동이 전적으로 결정되기 때문에 명시적인 매개 변수가 필요하지 않습니다.Over절.
창 스포츠 토토 결과로 고려되는 행은의 행입니다."가상 테이블"쿼리에서 생성From조항에 의해 필터링 된 조항여기서, 그룹 by및클로즈가있는 경우. 예를 들어, 행은를 충족하지 않기 때문에 제거되었습니다.여기서조건은 어떤 창 스포츠 토토 결과로도 표시되지 않습니다. 쿼리에는 여러 가지 방식으로 데이터를 다른 방식으로 슬라이스하는 여러 창 스포츠 토토 결과가 포함될 수 있습니다.Over클로즈이지만 모두이 가상 테이블로 정의 된 동일한 행 모음에 작용합니다.
우리는 이미 그것을 보았습니다주문 by행 주문이 중요하지 않은 경우 생략 할 수 있습니다. 생략 할 수도 있습니다파티션 by,이 경우 모든 행을 포함하는 파티션이 하나뿐입니다.
창 스포츠 토토 결과와 관련된 또 다른 중요한 개념이 있습니다. 각 행마다 파티션 내에이라는 행이 있습니다.창 프레임. 많은 (전부는 아님) 창 스포츠 토토 결과는 전체 파티션이 아닌 창 프레임의 행에서만 작용합니다. 기본적으로 if주문 by제공됩니다. 프레임은 현재 행을 통해 파티션의 시작부터 모든 행으로 구성되며에 따라 현재 행과 동일한 다음 행으로 구성됩니다.주문 by절. 언제주문 by생략 됨 기본 프레임은 파티션의 모든 행으로 구성됩니다.[1]여기를 사용하는 예는Sum
:
empsalary에서 () 이상의 급여, 합 (Salary)을 선택하십시오.
급여 | 합집합 --------+------- 5200 | 47100 5000 | 47100 3500 | 47100 4800 | 47100 3900 | 47100 4200 | 47100 4500 | 47100 4800 | 47100 6000 | 47100 5200 | 47100 (10 줄)
위의, 없기 때문에주문 byinOver절, 조항, 창 프레임은 파티션과 동일하며파티션 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;
위의 쿼리는 내부 쿼리의 행만 표시RANK3보다 작습니다.
쿼리에 여러 개의 창 스포츠 토토 결과가 포함되면 별도의 각각을 쓸 수 있습니다Over절단이지만, 여러 기능에 대해 동일한 윈도우 동작이 원하는 경우 이는 복제적이고 오류가 발생하기 쉽습니다. 대신, 각 윈도우 동작은 A에서 이름을 지정할 수 있습니다.창절과 참조Over. 예를 들어:
W에서 W, AVG (급여)를 통해 합 (급여)을 선택하십시오 empsalary에서 Window W as (Salary Desc의 Depname Order에 의한 파티션);
창 스포츠 토토 결과에 대한 자세한 내용은 찾을 수 있습니다.섹션 4.2.8, PostgreSQL : 문서 : 9.6 : 창 젠 토토, 섹션 7.2.5및PostgreSQL : 문서 : 9.6 : 롤 토토참조 페이지.
[1] |
다른 방식으로 창 프레임을 정의 할 수있는 옵션이 있지만이 자습서는이를 다루지 않습니다. 보다섹션 4.2.8자세한 내용. |