지원되는 버전: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.1 : 창 토토, 섹션 7.2.4그리고PostgreSQL : 문서 : 9.1 : 토토참조 페이지.

참고

[1]

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