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행)
처음 세 개의 출력 열은 테이블에서 직접 나옵니다.임직원, 출력 행이 1개 있습니다.
테이블의 각 행에 대해. 네 번째 열은 평균을 나타냅니다.
동일한 모든 테이블 행을 검색합니다.부서이름값을 현재 행으로 설정합니다. (이것은 실제로
일반과 동일한 기능입니다평균집계 메이저 토토 사이트이지만이상절로 인해 창으로 처리됩니다.
메이저 토토 사이트를 사용하여 적절한 행 집합에 걸쳐 계산됩니다.)
창 메이저 토토 사이트 호출에는 항상가 포함됩니다.이상창 메이저 토토 사이트 바로 뒤에 오는 절 이름과 인수. 이것이 구문론적으로 구별되는 점입니다. 일반 메이저 토토 사이트 또는 집계 메이저 토토 사이트에서. 그만큼이상절은 행의 행이 어떻게 지정되는지 정확하게 결정합니다. 쿼리는 창 기능에 의한 처리를 위해 분할됩니다.파티션 기준내 목록이상행을 그룹으로 나누도록 지정합니다. 또는 동일한 값을 공유하는 파티션,파티션 기준식. 각 행마다 창 함수는 동일한 행에 걸쳐 계산됩니다. 현재 행으로 파티션을 나누세요.
또한 다음을 통해 행이 처리되는 순서를 제어할 수 있습니다. 다음을 사용하는 창 함수주문 기준내부이상. (창문)주문 기준다음 순서와 일치할 필요도 없습니다. 행이 출력됩니다.) 다음은 예입니다.
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.3 : 창 롤 토토, 섹션 7.2.4, 그리고PostgreSQL : 문서 : 9.3 : 롤 토토참조 페이지.
| [1] |
창틀을 다른 방법으로 정의할 수 있는 옵션이 있지만, 이 튜토리얼에서는 이에 대해 다루지 않습니다. 참조섹션 4.2.8자세한 내용은. |