지원되는 버전:48006000004800600000600토토 사이트48006000006000004800500004800600000600000480048005000000000 (PostgreSQL : 문서 : 18 : 3.5. 창 토토 결과) / 4800 |6000 사설 토토 사이트0 |4800 |6000 사설 토토 사이트0 |6000 사설 토토 사이트0 |_4800 |6000 사설 토토 사이트0 |6000 사설 토토 사이트0 |4800 |500 사설 토토 사이트0 |4800 |6000 사설 토토 사이트0 |6000 사설 토토 사이트0 |4800 |4800 |500 사설 토토 사이트0 사설 토토 사이트0 사설 토토 사이트0 사설 토토 사이트 / 4800 |6000 스포츠 토토 베트맨0 |4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |_4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |4800 |500 스포츠 토토 베트맨0 |4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |4800 |4800 |500 스포츠 토토 베트맨0 스포츠 토토 베트맨0 스포츠 토토 베트맨0 스포츠 토토 베트맨 / 4800 |6000 스포츠 토토 베트맨0 |4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |_4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |4800 |500 스포츠 토토 베트맨0 |4800 |6000 스포츠 토토 베트맨0 |6000 스포츠 토토 베트맨0 |4800 |4800 |500 스포츠 토토 베트맨0 스포츠 토토 베트맨0 스포츠 토토 베트맨0 스포츠 토토 베트맨 / 4800 |6000 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |_4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |500 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |4800 |500 배트맨 토토0 배트맨 토토0 배트맨 토토0 배트맨 토토 / 4800 |6000 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |_4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |500 배트맨 토토0 |4800 |6000 배트맨 토토0 |6000 배트맨 토토0 |4800 |4800 |500 배트맨 토토0 배트맨 토토0 배트맨 토토0 배트맨 토토
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.48006000004800600000600토토 사이트48006000006000004800500004800600000600000480048005000000000버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

3.5. 창 기능

A 창 기능수행 어떻게든 관련된 테이블 행 집합에 대한 계산 현재 행으로. 이는 계산 유형과 유사합니다. 이는 집계 함수로 수행할 수 있습니다. 하지만 일반과는 달리 집계 함수, 창 함수를 사용해도 행이 발생하지 않습니다. 단일 출력 행으로 그룹화하려면 — 행은 유지됩니다. 그들의 별도의 정체성. 그 이면에는 창 기능이 있습니다. 쿼리의 현재 행보다 더 많은 것에 액세스할 수 있습니다. 결과.

다음은 각 직원의 업무를 비교하는 방법을 보여주는 예입니다. 해당 부서의 평균 급여와 급여:

SELECT depname, empno, Salary, avg(salary) OVER (PARTITION BY depname) FROM empsalary;
부서명 | 엠프노 | 급여 |          평균          
---------+---------+---------+----------
 개발 |    11 |   5200 | 5020.0000000000000000
 개발 |     7 |   4200 | 5020.0000000000000000
 개발 |     9 |   4500 | 5020.0000000000000000
 개발 |     8 |   6000 | 5020.0000000000000000
 개발 |    10 |   5200 | 5020.0000000000000000
 인사 |     5 |   3500 | 3700.0000000000000000
 인사 |     2 |   3900 | 3700.0000000000000000
 판매 |     3 |   4800 | 4866.6666666666666667
 판매 |     1 |   5000 | 4866.6666666666666667
 판매 |     4 |   4800 | 4866.6666666666666667
(10행)

처음 세 개의 출력 열은 테이블에서 직접 나옵니다.직원급여, 출력이 하나 있습니다. 테이블의 각 행에 대한 행입니다. 네 번째 열은 다음을 나타냅니다. 동일한 모든 테이블 행에 대해 취한 평균부서이름값을 현재 행으로 설정합니다. (실제로는 일반과 동일한 기능입니다.)평균집계 롤 토토이지만이상절로 인해 창으로 처리됩니다. 롤 토토를 사용하여 적절한 행 집합에 걸쳐 계산됩니다.)

창 롤 토토 호출에는 항상가 포함됩니다.이상창 롤 토토 이름 뒤에 오는 절 및 인수. 이것이 구문론적으로 다른 것과 구별되는 점입니다. 일반 롤 토토 또는 집계 롤 토토. 그만큼이상절은 행의 행이 어떻게 지정되는지 정확하게 결정합니다. 쿼리는 창 기능에 의한 처리를 위해 분할됩니다. 그만큼파티션 기준다음 목록이상행을 그룹으로 나누도록 지정합니다. 또는 동일한 값을 공유하는 파티션,파티션 기준식. 각 행에 대해 창 함수는 다음과 같은 행에 걸쳐 계산됩니다. 현재 행과 동일한 파티션입니다.

하지만평균다음을 생산할 것입니다. 파티션을 처리하는 순서에 관계없이 동일한 결과 행에 있는 경우 이는 모든 창 기능에 해당되는 것은 아닙니다. 필요할 때, 다음을 사용하여 해당 순서를 제어할 수 있습니다.주문 으로내부이상. 여기는 예:

SELECT 부서명, empno, 급여, 순위() OVER (PARTITION BY 부서명 ORDER BY 급여 DESC) FROM empsalary;
부서이름 | 엠프노 | 급여 | 순위 
---------+---------+---------+------
 개발 |     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행)

여기에 표시된 대로,순위함수 현재 행의 파티션 내에서 숫자 순위를 생성합니다. 각각 다른주문 기준값, 에 의해 정의된 순서주문 기준절.순위명시적인 매개변수가 필요하지 않습니다. 그 동작은 전적으로 다음에 의해 결정되기 때문입니다.이상절.

창 함수에 의해 고려되는 행은 다음의 행입니다."가상 테이블"제작자: 쿼리발신해당 항목으로 필터링된 절어디에서, 그룹 으로가지고 있는 중절이 있는 경우. 에 대한 예를 들어, 다음을 충족하지 않아 삭제된 행입니다.어디에서어떤 창에서도 조건이 보이지 않습니다 기능. 쿼리에는 다음과 같은 여러 창 함수가 포함될 수 있습니다. 다양한 방식으로 데이터를 분할합니다.이상절이지만 모두 다음에 따라 행동합니다. 이 가상 테이블에 의해 정의된 동일한 행 컬렉션입니다.

우리는 이미 그것을 보았습니다주문 기준될 수 있습니다 행 순서가 중요하지 않으면 생략됩니다. 그것은 또한 생략 가능파티션 기준, 모든 행을 포함하는 파티션이 하나만 있는 경우입니다.

창과 관련된 또 다른 중요한 개념이 있습니다. 롤 토토: 각 행마다 해당 행 내에 일련의 행이 있습니다. 파티션이라고 함창틀. 많은 (전부는 아님) 창 기능은 창의 행에서만 작동합니다. 전체 파티션이 아닌 프레임. 기본적으로 다음과 같은 경우주문 기준다음에 프레임이 제공됩니다. 파티션 시작부터 끝까지 모든 행으로 구성됩니다. 현재 행과 다음 행과 동일한 행 에 따른 현재 행주문 기준절. 언제주문 기준생략됨 기본 프레임은 파티션의 모든 행으로 구성됩니다.[1]다음은 다음을 사용한 예입니다.:

SELECT 급여, 합계(급여) OVER () FROM empsalary;
급여 |  합계  
------+-------
   5200 | 47100
   5000 | 47100
   3500 | 47100
   4800 | 47100
   3900 | 47100
   4200 | 47100
   4500 | 47100
   4800 | 47100
   6000 | 47100
   5200 | 47100
(10행)

위, 없기 때문에주문 기준이상절, 창틀은 파티션과 동일하지만 부족합니다.파티션 기준은 전체 테이블입니다. 즉 각 합계가 전체 테이블에 적용되므로 동일한 결과를 얻습니다. 각 출력 행에 대한 결과입니다. 하지만 만약 우리가주문 기준절, 우리는 매우 달라졌습니다 결과:

SELECT 급여, 합계(급여) OVER (ORDER BY 급여) FROM empsalary;
급여 |  합계  
------+-------
   3500 |  3500
   3900 |  7400
   4200 | 11600
   4500 | 16100
   4800 | 25700
   4800 | 25700
   5000 | 30700
   5200 | 41100
   5200 | 41100
   6000 | 47100
(10행)

여기서 합계는 첫 번째(최저) 급여에서 위로 가져옵니다. 현재의 중복을 포함하여 현재 것을 통해 하나(중복된 급여에 대한 결과 확인).

창 기능은 다음에서만 허용됩니다.선택목록 및주문 으로쿼리의 절입니다. 다른 곳에서는 금지되어 있습니다. 에서와 같이그룹별, 가지고 있는 중그리고어디절. 이는 처리 후에 논리적으로 실행되기 때문입니다. 그 조항. 또한 윈도우 함수는 정규 후에 실행됩니다. 집계 함수. 이는 다음을 포함하는 것이 유효함을 의미합니다. 창 함수의 인수에서 집계 함수 호출, 하지만 그 반대는 아닙니다.

창 이후 행을 필터링하거나 그룹화해야 하는 경우 계산이 수행되면 하위 선택을 사용할 수 있습니다. 에 대한 예:

SELECT 부서 이름, empno, 급여, 등록_날짜
에서
  (SELECT 부서 이름, empno, 급여, 등록_날짜,
          순위() OVER (PARTITION BY depname ORDER BY 급여 DESC, empno) AS pos
     직원 급여에서
  ) AS SS
위치 < 3;

위 쿼리는 내부 쿼리의 행만 표시합니다. 가지고 있는순위미만3.

쿼리가 여러 창 기능과 관련된 경우, 각각을 별도의 이름으로 작성할 수 있습니다.이상절이지만 이는 중복되어 있으며 여러 항목에 대해 동일한 창 동작을 원하는 경우 오류가 발생하기 쉽습니다. 기능. 대신 각 창 동작의 이름을 다음과 같이 지정할 수 있습니다.절 이후에 참조됨이상. 예를 들면:

SELECT 합계(급여) OVER w, 평균(급여) OVER w
  직원 급여에서
  WINDOW w AS (PARTITION BY 부서 이름 ORDER BY 급여 DESC);

창 기능에 대한 자세한 내용은 다음에서 찾을 수 있습니다.섹션 4.2.8, PostgreSQL : 문서 : 9.0 : 창 사설 토토, 섹션 7.2.4그리고PostgreSQL : 문서 : 9.0 : 메이저 토토 사이트참조 페이지.

참고

[1]

다른 창틀을 정의하는 옵션이 있습니다 하지만 이 튜토리얼에서는 이를 다루지 않습니다. 참조섹션 4.2.8자세한 내용은.