Articles

는 분석 기능을 개념에서 표준 SQL

는 분석 기능을 계산한 값의 그룹을 통해 행 반환한 단일 결과에 대한 각각의 행이 있습니다. 이는 행 그룹에 대해 단일 결과를 반환하는 집계 함수와는 다릅니다.

분석 함수에는OVER절이 포함되며,이 절은 평가되는 행 주위에 행의 창을 정의합니다. 각 행에 대해 분석 함수 결과선택된 행 창을 입력으로 사용하여 집계 할 수 있습니다.

분석 함수를 사용하면 이동 평균,순위 항목,계산 합계를 계산하고 다른 분석을 수행 할 수 있습니다.

다음과 같은 기능으로 사용할 수 있는 분석 기능:탐색 기능 번호,기능,andaggregate 분석 기능

는 분석 기능을 구

analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }window_specification: ] ] window_frame_clause: { rows_range } { frame_start | frame_between }rows_range: { ROWS | RANGE }

표기 규칙

  • 대괄호””선택적으로 나타냅 절입니다.
  • 괄호”()”는 리터럴 괄호를 나타냅니다.
  • 수직 막대”|”는 논리적 또는를 나타냅니다.
  • 중괄호”{}”는 일련의 옵션을 묶습니다.
  • 쉼표임 대괄호 안에””나는 앞에 항목을 반복할 수 있는 쉼표로 구분한 목록입니다.

설명

분석 함수는 행 그룹을 통해 결과를 계산합니다. 당신이 사용할 수 있는 다음과 같은 구문을 구축하는 분석 기능:

  • analytic_function_nameRANK()를 여기에서 사용할 수 있습니다.
  • argument_list:분석 함수에 특정한 인수.일부 기능에는 기능이 있고 일부는 기능이 없습니다.
  • OVER:키워드는 필요한 분석 기능을 구문 precedingtheOVERclause.
  • over_clause:분석 함수를 사용할 테이블의 groupof 행을 정의하는 창을 참조합니다.
  • window_specification:창에 대한 사양을 정의합니다.
  • window_frame_clause:창에 대한 창 프레임을 정의합니다.
  • rows_range:창 프레임에 대한 실제 행 또는 alogical 범위를 정의합니다.

메모

는 분석 기능으로 표시될 수 있습니다 스칼라 식 연산자 intwo 장소에서 쿼리:

  • SELECTSELECTOVER항을 참조 할 수 없습니다 별칭에 소개되는 동일한 목록을 선택합니다.
  • ORDER BYORDER BYSELECT목록 별명이 있습니다.

는 분석 기능을 참조 할 수 없습니다른 분석적 함수에서 itsargument 목록 또는 그것의OVER절차를 통해 간접적으로는 별칭입니다.

분석 함수는 집계 후에 평가됩니다. 예를 들어,GROUP BY절과 비 분석 aggregate 기능을 먼저 계산됩니다.집계 함수는 분석 함수 전에 평가되므로 집계 함수는 분석 함수에 대한 입력 피연산자로 사용할 수 있습니다.

반환

입력의 각 행에 대한 단일 결과.

정의 이 절

analytic_function_name ( ) OVER over_clauseover_clause: { named_window | ( ) }

Description

OVER절을 참고 창을 정의하는 그룹의 행 tableupon 는 사용하는 분석 기능입니다. 쿼리에서 정의 된named_window를 제공하거나 새 창에 대한 사양을 정의 할 수 있습니다.

Notes

명명 된 창이나 창 사양이 제공되지 않으면 모든 행에 대해 allinput 행이 창에 포함됩니다.

예를 사용하는OVER

이러한 쿼리를 사용하여 윈도우 사양:

  • 계산 총계
  • 를 계산 합계
  • 누적 계산 합계
  • 컴퓨팅에 이동 평균
  • 계산 개수 항목의 범위 내에서
  • 가장 인기있는 항목에서 각각의 카테고리
  • 얻을에서 마지막 값 범위
  • 계산 순위

이러한 쿼리를 사용하라는 창이:

  • 얻을에서 마지막 값 범위
  • 사용하는 이름이 창에서는 창조 절

정의 창 사양

window_specification: ] ] 

Description

정의에 대한 사양의 창을 엽니다.

  • named_windowWINDOW절로 정의 된 기존 창의 이름입니다.
  • PARTITION BY:휴식의 입력으로 별도의 파티션,overwhich 분석 기능은 독립적으로 평가됩니다.

    • 다중 파티션 표현식은PARTITION BY절에서 허용됩니다.
    • 표현할 수 없을 포함하는 부동 소수점 유형,비 groupable 유형,상수 또는 분석 기능입니다.
    • 이 선택적 절을 사용하지 않는 모든 행에 입력 tablecomprise 단일 파티션입니다.
  • ORDER BY:파티션 내에서 행이 정렬되는 방법을 정의합니다.이 절은 대부분의 상황에서 선택 사항이지만 일부에서 필요합니다.탐색 기능을위한 케이스.
  • window_frame_clauseORDER BY는 fullyunbounded windows 를 제외하고 필요합니다.

Notes

ORDER BY절이나 창 프레임 절이 없으면 창 프레임에 해당 파티션의 모든 행이 포함됩니다.

에 대한 집계 분석적 함수,경우에는ORDER BY절은 현재 butthe 창조 절지 않는,다음과 같은 창조 절은 기본적으로 사용됩:

RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

예를 들어,다음과 같은 쿼리는 동일합니다.

SELECT book, LAST_VALUE(item) OVER (ORDER BY year)FROM Library

SELECT book, LAST_VALUE(item) OVER ( ORDER BY year RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)FROM Library

에 대한 규칙을 사용하라는 창의 창 사양

를 사용하는 경우 이름 창에서 당신의 창 명세,이러한 규칙이 적용됩니다.

  • 사양에서 명명된 창할 수 있습 extendedwith 새로운 사양에서 정의하는 창의 사양을 절입니다.
  • 중복 정의를 가질 수 없습니다. ORDER BYclausein 명명 된 창 및 창 사양 절이있는 경우 anerror 가 발생합니다.
  • 조항의 순서가 중요합니다. PARTITION BYORDER BYwindow_frame_clause. 이름이 지정된 창을 추가하면 해당 창 사양이 먼저 처리됩니다.

    --this works:SELECT item, purchases, LAST_VALUE(item) OVER (item_window ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS most_popularFROM ProduceWINDOW item_window AS (ORDER BY purchases)--this does not work:SELECT item, purchases, LAST_VALUE(item) OVER (item_window ORDER BY purchases) AS most_popularFROM ProduceWINDOW item_window AS (ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)
  • 명명된 창고PARTITION BY수 없이 함께 나타납에서 thewindow 사양에 있습니다. PARTITION BY가 필요한 경우 명명 된 창에 추가하십시오.

  • ORDER BY절,외부 쿼리 또는 하위 쿼리에서 명명 된 창을 참조 할 수 없습니다.

예를 사용하는 창의 사양

이러한 쿼리를 정의한 파티션에서는 분석적 기능:

  • 를 계산 합계
  • 누적 계산 합계
  • 가장 인기있는 항목에서 각각의 카테고리
  • 얻을에서 마지막 값 범위
  • 계산 순위
  • 사용하는 이름이 창에서는 창조 절

이러한 쿼리를 포함한 명명된 창에서 창 사양:

  • 얻을에서 마지막 값 범위
  • 사용하는 이름이 창에서는 창조 절

이러한 쿼리를 정의하는 방법을 행하는 주문에 파티션:

  • 를 계산 합계
  • 누적 계산 합계
  • 컴퓨팅에 이동 평균
  • 계산 개수 항목의 범위 내에서
  • 가장 인기있는 항목에서 각각의 카테고리
  • 얻을에서 마지막 값 범위
  • 계산 순위
  • 를 사용하라는 창에서는 창조 절

정의 창조 절

window_frame_clause: { rows_range } { frame_start | frame_between }rows_range: { ROWS | RANGE }frame_between: { BETWEEN unbounded_preceding AND frame_end_a | BETWEEN numeric_preceding AND frame_end_a | BETWEEN current_row AND frame_end_b | BETWEEN numeric_following AND frame_end_c }frame_start: { unbounded_preceding | numeric_preceding | }frame_end_a: { numeric_preceding | current_row | numeric_following | unbounded_following }frame_end_b: { current_row | numeric_following | unbounded_following }frame_end_c: { numeric_following | unbounded_following }unbounded_preceding: UNBOUNDED PRECEDINGnumeric_preceding: numeric_expression PRECEDINGunbounded_following: UNBOUNDED FOLLOWINGnumeric_following: numeric_expression FOLLOWINGcurrent_row: CURRENT ROW

창조 절 정의 창조 현재의 행 withina 파티션,는 분석 기능을 평가합니다.집계 분석 함수 만 창 프레임 절을 사용할 수 있습니다.

  • rows_range:실제 행이있는 창 프레임을 정의하는 절또는 논리적 범위.

    • ROWS:현재 행의 물리적 오프셋을 기반으로 창 프레임을 계산합니다. 예를 들어,전후 두 행을 포함 할 수 있습니다현재 행입니다.
    • RANGE:계산하여 윈도우 프레임에 기초한 논리적인 범위의 rowsaround 현재의 행에 기초하여,현재의 행ORDER BY키 값입니다.제공하는 범위 값을 추가하거나 빼는 현재의 행 ‘skey 값을 정의하려면 시작 또는 끝나는 범위에 대한 경계 thewindow 프레임입니다. 범위 기반 창 프레임에는ORDER BY절에 정확히 하나의 표현식이 있어야하며 표현식에는 anumeric 유형이 있어야합니다.

    팁:날짜가있는 범위를 사용하려면ORDER BYUNIX_DATE()UNIX_SECONDS()UNIX_MILLIS()UNIX_MICROS()기능이다.

  • frame_between:아래쪽 및 위쪽 경계가있는 창 프레임을 만듭니다.첫 번째 경계는 하단 경계를 나타냅니다. 두 번째 경계상위 경계를 나타냅니다. 특정 경계 조합 만 사용할 수 있습니다.앞의 구문에 표시된 것처럼 사용하십시오.

    • 의 시작 부분의 윈도우 프레임과 함께unbounded_precedingnumeric_precedingnumeric_followingcurrent_row.
      • unbounded_preceding:창 프레임은 파티션의 시작 부분에서 시작됩니다.
      • numeric_precedingnumeric_following:의 시작 windowframe 가 상대하는 현재의 행이 있습니다.
      • current_row:창 프레임이 현재 행에서 시작됩니다.
    • 의 끝을 정의 창 프레임과 함께numeric_precedingnumeric_followingcurrent_rowunbounded_following.
      • numeric_precedingnumeric_following:의 끝 windowframe 을 행합니다.
      • current_row: 창 프레임은 현재 행에서 끝납니다.
      • unbounded_following:창 프레임은 파티션의 끝에서 끝납니다.
  • frame_start:경계선이 낮은 창 프레임을 만듭니다.창 프레임은 현재 행에서 끝납니다.

    • unbounded_preceding:창 프레임은 파티션의 시작 부분에서 시작됩니다.
    • numeric_preceding:창 프레임의 시작은 thecurrent 행에 상대적입니다.
    • current_row:창 프레임이 현재 행에서 시작됩니다.
  • numeric_expression:숫자 유형을 나타내는 표현식입니다.숫자 표현식은 음수가 아닌 상수 integeror 매개 변수여야 합니다.

메모

경우에는 경계를 넘어 이 시작 또는 끝나 파티션,윈도우 프레임이 포함 안에서 행하는 파티션입니다.

창 프레임 절을 사용할 수 없습니다.RANK()와 같은 navigation 함수 및 numbering 함수.

창 프레임 절을 사용하는 예

이러한 쿼리는ROWS로 값을 계산합니다.:

  • 누적 계산 합계
  • 컴퓨팅에 이동 평균
  • 가장 인기있는 항목에서 각각의 카테고리
  • 얻을에서 마지막 값 범위
  • 사용하는 이름이 창에서는 창조 절

이러한 쿼리를 계산 값으로RANGE:

  • 계산 개수 항목의 범위 내에서

이러한 쿼리를 계산 값으로 부분적으로 또는 완전히 약속 안함 창:

  • 계산 총계
  • 를 계산 합계
  • 누적 계산 합계
  • 가장 인기있는 항목에서 각각의 카테고리
  • 계산 순위

이러한 쿼리 값을 계산 숫자 경계:

  • 누적 계산 합계
  • 컴퓨팅에 이동 평균
  • 계산 개수 항목의 범위 내에서
  • 얻을에서 마지막 값 범위
  • 사용하는 이름이 창에서는 창조 절

이러한 쿼리를 계산 값은 현재의 행으로 경계:

  • 계산 총계
  • 를 계산 합계
  • 누적 계산 합계

를 참조하라는 창

SELECT query_expr, analytic_function_name ( ) OVER over_clauseFROM from_itemWINDOW named_window_expression over_clause: { named_window | ( ) }window_specification: ] ] named_window_expression: named_window AS { named_window | ( ) }

이라는 창이 나타내의 그룹에서 행 테이블에 사용하 ananalytic 기능입니다. 명명된 창에서 정의WINDOWOVERclause.에는OVER절 명명된 창이 나타날 수 있으로 사용되거나 또는 embeddedwithin 창 사양에 있습니다.

  • 얻을에서 마지막 값 범위
  • 사용하는 이름이 창에서는 창조 절

탐색 기능을 개념

네비게이션 기능은 일반적으로 계산 일부value_expressionOVER절 구문은 탐색 기능마다 다릅니다.

OVER절에 대한 요구 사항:

  • PARTITION BY:선택 사항.
  • ORDER BY:

    1. Disallowed for PERCENTILE_CONT and PERCENTILE_DISC.
    2. Required for FIRST_VALUELAST_VALUENTH_VALUELEADand LAG.
  • window_frame_clause:
    1. Disallowed for PERCENTILE_CONTPERCENTILE_DISCLEAD and LAG.
    2. Optional for FIRST_VALUELAST_VALUE, and NTH_VALUE.

모든 탐색 기능에 대해 결과 데이터 유형은value_expression와 동일한 유형입니다.

번호 매기기 기능이 개념

번호 매기기 기능을 할당 정수 값을 각 행에 따라 자신의 위치에 지정된 창입니다.

RANK()DENSE_RANK()ROW_NUMBER():

WITH Numbers AS (SELECT 1 as x UNION ALL SELECT 2 UNION ALL SELECT 2 UNION ALL SELECT 5 UNION ALL SELECT 8 UNION ALL SELECT 10 UNION ALL SELECT 10)SELECT x, RANK() OVER (ORDER BY x ASC) AS rank, DENSE_RANK() OVER (ORDER BY x ASC) AS dense_rank, ROW_NUMBER() OVER (ORDER BY x) AS row_numFROM Numbers+---------------------------------------------------+| x | rank | dense_rank | row_num |+---------------------------------------------------+| 1 | 1 | 1 | 1 || 2 | 2 | 2 | 2 || 2 | 2 | 2 | 3 || 5 | 4 | 3 | 4 || 8 | 5 | 4 | 5 || 10 | 6 | 5 | 6 || 10 | 6 | 5 | 7 |+---------------------------------------------------+
  • RANK(): X=5 의 경우rankRANK()는 이전 창 순서 그룹의 numberof 피어만큼 증가합니다.
  • DENSE_RANK():x=5,dense_rankDENSE_RANK()alwaysincrements1,결코 뛰는 값입니다.
  • ROW_NUMBER():x=5 의 경우row_num는 4 입니다.

집계 분석 함수 개념

집계 함수는 값의 aset 에서 계산을 수행하는 함수입니다. 대부분의 집계 함수는 ananalytic 함수에서 사용할 수 있습니다. 이러한 집계 함수는 분석 함수라고 부릅니다.

집계 분석 함수를 사용하면OVER절이 theaggregate 함수 호출에 추가됩니다.집계 함수 대응 물과 마찬가지로 이러한 분석 함수는 수행합니다.각 행에 대해 관련 창 프레임을 통해 구체적입니다.이러한 분석 함수의 결과 데이터 유형은 해당 함수의 대응과 동일합니다.

분석 함수 예제

이 예에서 강조 표시된 항목은 현재 행입니다. Boldeditems 는 분석에 포함된 행입니다.

일반적인 테이블에 사용되는 예를

다음과 같은 테이블에 사용되는 이후의 집계 analyticquery 예:ProduceEmployees,andFarm.

생성 테이블

일부 예제는Produce라는 테이블을 참조합니다.:

WITH Produce AS (SELECT 'kale' as item, 23 as purchases, 'vegetable' as category UNION ALL SELECT 'orange', 2, 'fruit' UNION ALL SELECT 'cabbage', 9, 'vegetable' UNION ALL SELECT 'apple', 8, 'fruit' UNION ALL SELECT 'leek', 2, 'vegetable' UNION ALL SELECT 'lettuce', 10, 'vegetable')SELECT * FROM Produce+-------------------------------------+| item | category | purchases |+-------------------------------------+| kale | vegetable | 23 || orange | fruit | 2 || cabbage | vegetable | 9 || apple | fruit | 8 || leek | vegetable | 2 || lettuce | vegetable | 10 |+-------------------------------------+

테이블의 직원

몇 가지 예를 참조하는 테이블이라는Employees

WITH Employees AS (SELECT 'Isabella' as name, 2 as department, DATE(1997, 09, 28) as start_date UNION ALL SELECT 'Anthony', 1, DATE(1995, 11, 29) UNION ALL SELECT 'Daniel', 2, DATE(2004, 06, 24) UNION ALL SELECT 'Andrew', 1, DATE(1999, 01, 23) UNION ALL SELECT 'Jacob', 1, DATE(1990, 07, 11) UNION ALL SELECT 'Jose', 2, DATE(2013, 03, 17))SELECT * FROM Employees+-------------------------------------+| name | department | start_date |+-------------------------------------+| Isabella | 2 | 1997-09-28 || Anthony | 1 | 1995-11-29 || Daniel | 2 | 2004-06-24 || Andrew | 1 | 1999-01-23 || Jacob | 1 | 1990-07-11 || Jose | 2 | 2013-03-17 |+-------------------------------------+

팜 테이블

몇 가지 예를 참조하는 테이블이라는Farm:

WITH Farm AS (SELECT 'cat' as animal, 23 as population, 'mammal' as category UNION ALL SELECT 'duck', 3, 'bird' UNION ALL SELECT 'dog', 2, 'mammal' UNION ALL SELECT 'goose', 1, 'bird' UNION ALL SELECT 'ox', 2, 'mammal' UNION ALL SELECT 'goat', 2, 'mammal')SELECT * FROM Farm+-------------------------------------+| animal | category | population |+-------------------------------------+| cat | mammal | 23 || duck | bird | 3 || dog | mammal | 2 || goose | bird | 1 || ox | mammal | 2 || goat | mammal | 2 |+-------------------------------------+

계산 총계

이 계산 총계에 모든 항목에 대해Produce테이블.

  • (오렌지,사과,부추,양배추,양상추,양배추)=54 총 구매
  • (오렌지,사과,부추,양배추,양상추,양배추)=54 총 구매
  • (오렌지,사과,부추,양배추,양상추,양배추)=54 총 구매
  • (오렌지,사과,부추,양배추,양상추,양배추) =54 총 구매
  • (오렌지,사과,부추,양배추,양상추,양배추)=54 총 구매
  • (오렌지,사과,부추,양배추,양상추,양배추)=54 총 구매
SELECT item, purchases, category, SUM(purchases) OVER () AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 54 || leek | 2 | vegetable | 54 || apple | 8 | fruit | 54 || cabbage | 9 | vegetable | 54 || lettuce | 10 | vegetable | 54 || kale | 23 | vegetable | 54 |+-------------------------------------------------------+

를 계산 합계

이 계산에 대한 소계 각 범주에서는Produce테이블.

    • (오렌지,사과)=10 총 구매
    • (오렌지,사과)=10 총 구매
  • 식물성
    • (부추,양배추,양상추,양배추)=44 총 구매
    • (부추,양배추,양상추,양배추) =44 총 구매
    • (부추,양배추,양상추,양배추)=44 총 구매
    • (부추,양배추,양상추,양배추) =44 총 구매
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 10 || apple | 8 | fruit | 10 || leek | 2 | vegetable | 44 || cabbage | 9 | vegetable | 44 || lettuce | 10 | vegetable | 44 || kale | 23 | vegetable | 44 |+-------------------------------------------------------+

누적 계산 합계

이를 계산합니 누적합계에서 각 범주에 대해ProduceORDER BY절을 사용하여 정의 된 theorder 와 관련하여 계산됩니다.

    • (오렌지,사과)=2 총 구매
    • (오렌지,사과)=10 총 구매
  • 식물성
    • (부추,양배추,양상추,양배추)=2 총 구매
    • (부추,양배추,양상추,양배추) =11 총 구매
    • (부추,양배추,양상추,양배추)=21 총 구매
    • (부추,양배추,양상추,양배추)=44 총 구매
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS total_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 2 || apple | 8 | fruit | 10 || leek | 2 | vegetable | 2 || cabbage | 9 | vegetable | 11 || lettuce | 10 | vegetable | 21 || kale | 23 | vegetable | 44 |+-------------------------------------------------------+

이와 같은 일을 하는 앞의 예입니다. 가독성을 위해 원하지 않는 한 경계로CURRENT ROW를 추가 할 필요가 없습니다.

SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS UNBOUNDED PRECEDING ) AS total_purchasesFROM Produce

이 예제에서,모든 항목에서Produce테이블을 포함합니다. 앞의 행만 분석됩니다. 분석은 파티션의 현재 행 이전에 두 개로 시작됩니다.

  • (오렌지,파,사과,배추,양상추,양배추)=NULL
  • (오렌지,파,사과,배추,양상추,양배추)=NULL
  • (오렌지,파,사과,배추,양상추,양배추)=2
  • (오렌지,파,사과,배추,양상추,양배추) =4
  • (오렌지,파,사과,배추,양상추,양배추)=12
  • (오렌지,파,사과,배추,양상추,양배추) =21
SELECT item, purchases, category, SUM(purchases) OVER ( ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND 2 PRECEDING ) AS total_purchasesFROM Produce;+-------------------------------------------------------+| item | purchases | category | total_purchases |+-------------------------------------------------------+| orange | 2 | fruit | NULL || leek | 2 | vegetable | NULL || apple | 8 | fruit | 2 || cabbage | 9 | vegetable | 4 || lettuce | 10 | vegetable | 12 || kale | 23 | vegetable | 21 |+-------------------------------------------------------+

컴퓨팅에 이동 평균

이 계산하여 이동 평균을Produce테이블.하단 경계는 1 행 이전입니다.현재 행. 상단 경계는 현재 행 다음에 1 행입니다.

  • (오렌지,파,사과,배추,양상추,양배추)=2 평균 구매
  • (오렌지,파,사과,배추,양상추,양배추)=4 균 구매
  • (오렌지,파,사과,배추,양상추,양배추)=6.3333 평균 구매
  • (오렌지,파,사과,배추,양상추,양배추) =9 평균 구매
  • (오렌지,파,사과,배추,양상추,양배추)=14 일 평균 구매
  • (오렌지,파,사과,배추,양상추,양배추)=16.5 평균 구매
SELECT item, purchases, category, AVG(purchases) OVER ( ORDER BY purchases ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS avg_purchasesFROM Produce+-------------------------------------------------------+| item | purchases | category | avg_purchases |+-------------------------------------------------------+| orange | 2 | fruit | 2 || leek | 2 | vegetable | 4 || apple | 8 | fruit | 6.33333 || cabbage | 9 | vegetable | 9 || lettuce | 10 | vegetable | 14 || kale | 23 | vegetable | 16.5 |+-------------------------------------------------------+

계산 개수 항목의 범위 내에서

이 예제의 수를 가져옵니다 동물에 있는 비슷한 populationcountFarm테이블.

  • (거위,개,황소,염소,오리,고양이)=인구 범위 0-2 사이의 4 마리의 동물.
  • (거위,개,황소,염소,오리,고양이)=인구 범위 1-3 사이의 5 마리의 동물.
  • (거위,개,황소,염소,오리,고양이)=인구 범위 1-3 사이의 5 마리의 동물.
  • (거위,개,황소,염소,오리,고양이)=인구 범위 1-3 사이의 5 마리의 동물.
  • (거위,개,황소,염소,오리,고양이)=인구 범위 2-4 사이의 4 마리의 동물.
  • (거위,개,황소,염소,오리,고양이)=인구 범위 22-24 사이의 동물 1 마리.
SELECT animal, population, category, COUNT(*) OVER ( ORDER BY population RANGE BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS similar_populationFROM Farm;+----------------------------------------------------------+| animal | population | category | similar_population |+----------------------------------------------------------+| goose | 1 | bird | 4 || dog | 2 | mammal | 5 || ox | 2 | mammal | 5 || goat | 2 | mammal | 5 || duck | 3 | bird | 4 || cat | 23 | mammal | 1 |+----------------------------------------------------------+

가장 인기있는 항목에서 각각의 카테고리

이 예제에서 가장 인기 있는 항목의 각 카테고리입니다. 각 파티션에서 창을 분할하고 정렬하는 방법을 정의합니다. Produce테이블이 참조됩니다.

    • (오렌지,사과)=애플을 가장 인기 있는
    • (오렌지,사과)=애플을 가장 인기 있는
  • 식물성
    • (부추,양배추,양상추,양배추)=케이 가장 인기 있는
    • (부추,양배추,양상추,양배추) =케이 가장 인기 있는
    • (부추,양배추,양상추,양배추)=케이 가장 인기 있는
    • (부추,양배추,양상추,양배추) =케이 가장 인기 있는
SELECT item, purchases, category, LAST_VALUE(item) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING ) AS most_popularFROM Produce+----------------------------------------------------+| item | purchases | category | most_popular |+----------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | kale || cabbage | 9 | vegetable | kale || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+----------------------------------------------------+

얻을에서 마지막 값 범위

이 예제에서 가장 인기 있는 항목의 특정 창,프레임을 사용하여Producemost_popular열을 자세히 살펴보십시오.대신 가장 인기있는 항목에서 특정 카테고리,그것을 가져 가장 인기있는 항목에서 특정 범위에 있는 카테고리입니다.

    • (오렌지,사과)=애플을 가장 인기 있는
    • (오렌지,사과)=애플을 가장 인기 있는
  • 식물성
    • (부추,양배추,양상추,양배추)=양배추는 가장 인기 있는
    • (부추,양배추,양상추,양배추) =양상추는 가장 인기 있는
    • (부추,양배추,양상추,양배추)=케이 가장 인기 있는
    • (부추,양배추,양상추,양배추)=케이 가장 인기 있는
SELECT item, purchases, category, LAST_VALUE(item) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM Produce+----------------------------------------------------+| item | purchases | category | most_popular |+----------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | cabbage || cabbage | 9 | vegetable | lettuce || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+----------------------------------------------------+

이 예제와 같은 결과를 반환합 위의 예제 하지만 그것 includesa 라는 창이라는item_windowOVER절에서 직접 정의되고 일부는 명명 된 창에 정의됩니다.

SELECT item, purchases, category, LAST_VALUE(item) OVER ( item_window ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM ProduceWINDOW item_window AS ( PARTITION BY category ORDER BY purchases)

계산 순위

이 예에서 계산합 순위에서 각 직원의 내부를 기반으로,그 날짜를 시작합니다. 창 사양은OVEREmployees테이블이 참조됩니다.

  • 1 부
    • (야곱,앤서니,앤드류)=할당 순위 1 야곱
    • (야곱,앤서니,앤드류)=할당 순위 2Anthony
    • (야곱,앤서니,앤드류)=할당 순위 3Andrew
  • 2 부
    • (이사벨은,다니엘, Jose)=할당 순위 1 벨
    • (이사벨은,다니엘,호세)=할당 2 순위를 다니엘
    • (이사벨은,다니엘,호세) =할당 순위 3Jose
SELECT name, department, start_date, RANK() OVER (PARTITION BY department ORDER BY start_date) AS rankFROM Employees;+--------------------------------------------+| name | department | start_date | rank |+--------------------------------------------+| Jacob | 1 | 1990-07-11 | 1 || Anthony | 1 | 1995-11-29 | 2 || Andrew | 1 | 1999-01-23 | 3 || Isabella | 2 | 1997-09-28 | 1 || Daniel | 2 | 2004-06-24 | 2 || Jose | 2 | 2013-03-17 | 3 |+--------------------------------------------+

를 사용하라는 창에서는 창조 절

정의할 수 있습의 일부는 당신의 논리에서 명명된 창고에서 그것의 일부 awindow 프레임 절. 이 논리는 결합됩니다. 다음은Produce테이블을 사용하는 예입니다.

SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window) AS most_popularFROM ProduceWINDOW item_window AS ( PARTITION BY category ORDER BY purchases ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)+-------------------------------------------------------+| item | purchases | category | most_popular |+-------------------------------------------------------+| orange | 2 | fruit | apple || apple | 8 | fruit | apple || leek | 2 | vegetable | lettuce || cabbage | 9 | vegetable | kale || lettuce | 10 | vegetable | kale || kale | 23 | vegetable | kale |+-------------------------------------------------------+

할 수 있도 이전 결과 이러한 예제:

SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window) AS most_popularFROM ProduceWINDOW a AS (PARTITION BY category), b AS (a ORDER BY purchases), c AS (b ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING), item_window AS (c)
SELECT item, purchases, category, LAST_VALUE(item) OVER (item_window ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING) AS most_popularFROM ProduceWINDOW a AS (PARTITION BY category), b AS (a ORDER BY purchases), item_window AS (b)

다음 예제에서는 오류가 발생합니다이기 때문에 창조 절을 beendefined 두 번

SELECT item, purchases, category, LAST_VALUE(item) OVER ( item_window ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING ) AS most_popularFROM ProduceWINDOW item_window AS ( ORDER BY purchases ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING)