Loading...
MySQL 9.5 Reference Manual 9.5의 14.20.4 Named Windows의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
OVER 절에서 참조할 수 있도록 Window를 정의하고 이름을 부여할 수 있습니다. 이를 위해 WINDOW 절을 사용합니다. Query에 존재하는 경우, WINDOW 절은 HAVING 절과 ORDER BY 절 사이에 위치하며, 다음과 같은 구문을 가집니다:
1WINDOW window_name AS (window_spec) 2 [, window_name AS (window_spec)] ...
각 Window 정의에서 window_name 은 Window 이름이고, window_spec 은 OVER 절의 괄호 안에 주어지는 Window 명시와 동일한 유형의 Window 명시입니다. 이에 대해서는 Section 14.20.2, “Window Function Concepts and Syntax”에서 설명합니다:
1window_spec: 2 [window_name] [partition_clause] [order_clause] [frame_clause]
WINDOW 절은 여러 OVER 절이 동일한 Window를 정의하게 될 Query에서 유용합니다. 대신, Window를 한 번 정의하고 이름을 부여한 뒤, 그 이름을 OVER 절에서 참조할 수 있습니다. 다음 Query를 살펴보면, 동일한 Window를 여러 번 정의하고 있습니다:
1SELECT 2 val, 3 ROW_NUMBER() OVER (ORDER BY val) AS 'row_number', 4 RANK() OVER (ORDER BY val) AS 'rank', 5 DENSE_RANK() OVER (ORDER BY val) AS 'dense_rank' 6FROM numbers;
이 Query는 WINDOW를 사용하여 Window를 한 번만 정의하고, OVER 절에서 이름으로 참조하도록 더 단순하게 작성할 수 있습니다:
1SELECT 2 val, 3 ROW_NUMBER() OVER w AS 'row_number', 4 RANK() OVER w AS 'rank', 5 DENSE_RANK() OVER w AS 'dense_rank' 6FROM numbers 7WINDOW w AS (ORDER BY val);
Named Window를 사용하면 Window 정의를 변경하여 Query 결과에 미치는 영향을 실험하기도 더 쉽습니다. 여러 개의 OVER 절 정의를 수정하는 대신, WINDOW 절의 Window 정의만 수정하면 됩니다.
OVER 절이 OVER window_name이 아니라 OVER (window_name ...)을 사용하는 경우, Named Window는 다른 절을 추가함으로써 수정될 수 있습니다. 예를 들어, 다음 Query는 파티셔닝을 포함하는 Window를 정의하고, OVER 절에서 ORDER BY를 사용하여 Window를 서로 다른 방식으로 수정합니다:
1SELECT 2 DISTINCT year, country, 3 FIRST_VALUE(year) OVER (w ORDER BY year ASC) AS first, 4 FIRST_VALUE(year) OVER (w ORDER BY year DESC) AS last 5FROM sales 6WINDOW w AS (PARTITION BY country);
OVER 절은 Named Window에 속성을 추가만 할 수 있고, 수정할 수는 없습니다. Named Window 정의에 파티셔닝, 정렬, 혹은 프레이밍 속성이 포함되어 있는 경우, 해당 Window 이름을 참조하는 OVER 절에는 같은 종류의 속성을 포함할 수 없으며, 그렇지 않으면 오류가 발생합니다:
OVER 절이 같은 종류의 속성을 포함하지 않기 때문입니다:1OVER (w ORDER BY country) 2... WINDOW w AS (PARTITION BY country)
PARTITION BY가 있는데 OVER 절에서도 PARTITION BY를 지정하기 때문입니다:1OVER (w PARTITION BY year) 2... WINDOW w AS (PARTITION BY country)
Named Window의 정의는 자체적으로 window_name 으로 시작할 수 있습니다. 이러한 경우, Forward 및 Backward Reference는 허용되지만 Cycle은 허용되지 않습니다:
1WINDOW w1 AS (w2), w2 AS (), w3 AS (w1)
1WINDOW w1 AS (w2), w2 AS (w3), w3 AS (w1)
14.20.3 Window Function Frame Specification
14.20.5 Window Function Restrictions