

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 윈도우 함수
<a name="Window_functions"></a>

창 함수를 사용하면 사용자가 분석 비즈니스 쿼리를 보다 효율적으로 생성할 수 있습니다. 창 함수는 결과 집합의 파티션, 즉 "창"에서 실행되어 해당 창에 속하는 모든 행에 대한 값을 반환합니다. 이와는 반대로 창이 없는 함수는 결과 집합의 모든 행에 대해 계산을 실행합니다. 그 밖에도 결과 행을 집계하는 그룹 함수와 달리 창 함수에서는 테이블 표현식의 모든 행이 그대로 유지됩니다.

 반환 값은 해당 창에 속한 행 집합의 값을 사용하여 계산됩니다. 창은 테이블의 각 행마다 추가 속성을 계산하는 데 사용되는 행 집합을 정의합니다. 창은 창 명세(OVER 절)를 사용하여 정의되며, 다음과 같이 세 가지 주요 개념을 근거로 합니다.
+  *창 파티션* - 행 그룹을 형성합니다(PARTITION 절).
+  *창 순서 지정* - 각 파티션의 행 순서 또는 시퀀스를 정의합니다(ORDER BY 절).
+  *창 프레임* - 행 집합을 제한하기 위해 각 행마다 정의됩니다(ROWS 명세).

창 함수는 최종 ORDER BY 절을 제외하고 쿼리에서 실행되는 마지막 연산 집합입니다. 창 함수를 처리할 때는 그 전에 모든 조인을 비롯한 WHERE, GROUP BY 및 HAVING 절까지 모두 완료됩니다. 따라서 창 함수는 선택 목록 또는 ORDER BY 절에만 나타날 수 있습니다. 다른 프레임 절이 있는 단일 쿼리 내에서 여러 윈도 함수를 사용할 수 있습니다. CASE 등의 다른 스칼라 표현식에서 윈도 함수를 사용할 수도 있습니다.

## 창 함수 구문 요약
<a name="Window_function_synopsis"></a>

Window 함수는 다음과 같은 표준 구문을 따릅니다.

```
function (expression) OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list [ frame_clause ] ] )
```

 여기서 *함수*는 이 섹션에서 설명하는 함수 중 하나입니다.

*expr\$1list*는 다음과 같습니다.

```
expression | column_name [, expr_list ]
```

 *order\$1list*는 다음과 같습니다.

```
expression | column_name [ ASC | DESC ] 
[ NULLS FIRST | NULLS LAST ]
[, order_list ]
```

 *frame\$1clause*는 다음과 같습니다.

```
ROWS
{ UNBOUNDED PRECEDING | unsigned_value PRECEDING | CURRENT ROW } |

{ BETWEEN
{ UNBOUNDED PRECEDING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW}
AND
{ UNBOUNDED FOLLOWING | unsigned_value { PRECEDING | FOLLOWING } | CURRENT ROW }}
```

### 인수
<a name="Window_function_synopsis-arguments"></a>

 *함수*   
창 함수 자세한 내용은 각 함수에 대한 설명을 참조하세요.

OVER   
창 명세를 정의하는 절입니다. OVER 절은 창 함수에서 필수 인수로서 창 함수와 다른 SQL 함수를 구분하는 역할을 합니다.

PARTITION BY *expr\$1list*   
(옵션) PARTITION BY 절은 결과 집합을 여러 파티션으로 분할한다는 점에서 GROUP BY 절과 매우 유사합니다. 파티션 절이 존재하는 경우에는 함수가 각 파티션의 행에 대해 계산됩니다. 반대로 파티션 절을 지정하지 않으면 전체 테이블이 단일 파티션으로 구성되어 함수가 해당하는 전체 테이블에 대해서 계산됩니다.  
DENSE\$1RANK, NTILE, RANK, ROW\$1NUMBER 같은 순위 함수에서는 결과 집합의 모든 행을 전역적으로 비교해야 합니다. 이때 PARTITION BY 절을 사용하면 쿼리 옵티마이저가 워크로드를 파티션에 따라 다수의 조각으로 분산시키기 때문에 각 집계를 병렬 방식으로 실행할 수 있습니다. PARTITION BY 절을 사용하지 않으면 단일 조각에서 직렬 방식으로 집계를 실행해야 하기 때문에 특히 대용량의 클러스터에서는 성능에 매우 부정적인 영향을 끼치게 됩니다.  
AWS Clean Rooms는 PARTITION BY 절에서 문자열 리터럴을 지원하지 않습니다.

ORDER BY *order\$1list*   
(옵션) 윈도 함수는 ORDER BY의 순서 명세에 따라 정렬된 각 파티션의 행에 적용됩니다. 이 ORDER BY 절은 *frame\$1clause*의 ORDER BY 절과 구분되어 전혀 관련이 없습니다. 이러한 ORDER BY 절은 PARTITION BY 절 없이도 사용할 수 있습니다.  
순위 함수에서는 ORDER BY 절이 순위 값의 기준을 식별하는 역할을 합니다. 집계 함수에서는 각 프레임에 대한 집계 함수 계산 이전에 파티션 행의 순서를 지정해야 합니다. 윈도 함수 형식에 대한 자세한 내용은 [윈도우 함수](#Window_functions) 섹션을 참조하세요.  
order list에는 열 식별자, 또는 열 식별자로 평가되는 표현식이 필요합니다. 열 이름 대신에 상수나 상수 표현식을 사용할 수도 없습니다.  
NULLS 값은 자체 그룹으로 처리되어 NULLS FIRST 또는 NULLS LAST 옵션에 따라 정렬 후 순위가 결정됩니다. 기본적으로 NULL 값은 ASC 순서에서는 마지막에 정렬 후 순위가 결정되며, DESC 순서에서는 처음에 정렬 후 순위가 결정됩니다.  
AWS Clean Rooms는 ORDER BY 절에서 문자열 리터럴을 지원하지 않습니다.  
 ORDER BY 절을 생략하면 행의 순서는 비확정적입니다.  
와 같은 병렬 시스템에서 ORDER BY 절이 데이터의 고유하고 완전한 순서를 생성하지 않는 AWS Clean Rooms경우 행의 순서는 비결정적입니다. 즉, ORDER BY 표현식이 중복 값(부분 순서 지정)을 생성하는 경우 해당 행의 반환 순서는의 실행마다 다를 수 있습니다AWS Clean Rooms. 그러면 창 함수 역시 예상하지 못하거나 일관적이지 못한 결과를 반환하게 됩니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](#Examples_order_by_WF) 단원을 참조하십시오.

 *column\$1name*   
파티션으로 분할하거나 순서를 지정할 때 기준이 되는 열의 이름입니다.

ASC \$1 DESC   
표현식의 정렬 순서를 정의하는 옵션으로서 각각 다음과 같은 의미를 갖습니다.  
+ ASC: 오름차순(예: 숫자 값의 경우 낮은 값에서 높은 값 순, 문자열의 경우 'A'에서 'Z'의 순. 지정된 옵션이 없는 경우에는 데이터가 기본적으로 오름차순으로 정렬됩니다.
+ DESC: 내림차순(숫자 값의 경우 높은 값에서 낮은 값 순, 문자열의 경우 'Z'에서 'A'의 순).

NULLS FIRST \$1 NULLS LAST  
NULLS의 순서를 NULL 값 이외의 값 이전에 결정할지, 혹은 이후에 결정할지 지정하는 옵션입니다. 기본적으로 ASC 순서에서는 마지막에 정렬 후 순위가 결정되며, DESC 순서에서는 처음에 정렬 후 순위가 결정됩니다.

 *frame\$1clause*   
집계 함수에서 프레임 절은 ORDER BY를 사용하여 함수의 창에 포함되는 행 집합을 추가적으로 정제하는 역할을 합니다. 이를 통해 순서가 지정된 결과 내에 행 집합을 추가하거나 제거할 수 있습니다. ROWS 키워드와 관련 지정자로 구성됩니다.  
프레임 절은 순위 함수에 적용되지 않습니다. 또한 집계 함수의 OVER 절에 ORDER BY 절이 사용되지 않는 경우 프레임 절이 필요하지 않습니다. 집계 함수에서 ORDER BY 절이 사용되면 명시적인 프레임 절이 필요합니다.  
ORDER BY 절을 지정하지 않으면 묵시적 프레임이 무제한이기 때문에 ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING과 다름 없습니다.

ROWS  
이 절은 현재 행에서 물리적 오프셋을 지정하여 창 프레임을 정의합니다.  
이 절은 현재 창 또는 파티션에서 현재 행의 값이 결합되는 행을 지정합니다. 행의 위치는 인수를 사용하여 지정하며, 현재 행 앞 또는 뒤가 될 수 있습니다. 모든 창 프레임에서 기준점은 현재 행입니다. 각 행은 창 프레임이 파티션에서 밀려 앞으로 이동하면서 번갈아 현재 행이 됩니다.  
프레임은 다음과 같이 현재 행까지 포함하여 단일 행 집합이 되거나,  

```
{UNBOUNDED PRECEDING | offset PRECEDING | CURRENT ROW}
```
혹은 다음과 같이 두 경계 사이의 행 집합이 될 수도 있습니다.  

```
BETWEEN
{ UNBOUNDED PRECEDING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
AND
{ UNBOUNDED FOLLOWING | offset { PRECEDING | FOLLOWING } | CURRENT ROW }
```
UNBOUNDED PRECEDING은 파티션의 첫 행에서 창이 시작된다는 것을 나타내고, *offset* PRECEDING은 오프셋 값에 해당하는 행의 수만큼 현재 행 앞에서 창이 시작된다는 것을 나타냅니다. 기본값은 UNBOUNDED PRECEDING입니다.  
CURRENT ROW는 창이 현재 행에서 시작하거나 끝난다는 것을 나타냅니다.  
UNBOUNDED FOLLOWING은 파티션의 마지막 행에서 창이 끝나는 것을 나타내고, *offset* FOLLOWING은 오프셋 값에 해당하는 행의 수만큼 현재 행 뒤에서 창이 끝난다는 것을 나타냅니다.  
*offset*은 현재 행 앞 또는 뒤로 물리적인 행의 수를 의미합니다. 이 경우에는 *offset*이 양의 숫자 값으로 평가되는 상수여야 합니다. 예를 들어 5 FOLLOWING일 때는 현재 행 뒤로 5개 행을 지나 프레임이 종료됩니다.  
BETWEEN을 지정하지 않으면 묵시적이지만 프레임 경계가 현재 행으로 결정됩니다. 예를 들어 `ROWS 5 PRECEDING`은 `ROWS BETWEEN 5 PRECEDING AND CURRENT ROW`와 같습니다. 또한 `ROWS UNBOUNDED FOLLOWING`은 `ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING`과 같습니다.  
시작 경계가 종료 경계보다 크게 프레임을 지정할 수는 없습니다. 예를 들어 다음과 같은 프레임은 지정할 수 없습니다.  

```
between 5 following and 5 preceding
between current row and 2 preceding
between 3 following and current row
```

## 창 함수 데이터에 대한 고유 순서 지정
<a name="Examples_order_by_WF"></a>

윈도 함수의 ORDER BY 절이 데이터의 전체 순서를 고유하게 지정하지 않으면 행의 순서는 비확정적입니다. 다시 말해 ORDER BY 표현식에서 중복 값이 산출되면(부분 순서 지정) 여러 차례 실행할 때마다 해당 행의 반환 순서가 달라질 수 있습니다. 이 경우 윈도 함수 역시 예상하지 못하거나 일관적이지 못한 결과를 반환하게 됩니다.

예를 들어 다음 쿼리는 여러 실행에 대해 다른 결과를 반환합니다. 이러한 다른 결과는 `order by dateid`가 SUM 윈도 함수 데이터의 고유한 순서를 생성하지 않기 때문에 발생합니다.

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |   1730.00 |     1730.00
1827 |    708.00 |     2438.00
1827 |    234.00 |     2672.00
...

select dateid, pricepaid,
sum(pricepaid) over(order by dateid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid |   sumpaid
--------+-----------+-------------
1827 |    234.00 |      234.00
1827 |    472.00 |      706.00
1827 |    347.00 |     1053.00
...
```

 이 경우에는 두 번째 ORDER BY 열을 윈도 함수에 추가하여 문제를 해결할 수 있습니다.

```
select dateid, pricepaid,
sum(pricepaid) over(order by dateid, pricepaid rows unbounded preceding) as sumpaid
from sales
group by dateid, pricepaid;

dateid | pricepaid | sumpaid
--------+-----------+---------
1827 |    234.00 |  234.00
1827 |    337.00 |  571.00
1827 |    347.00 |  918.00
...
```

## 지원되는 함수
<a name="Window_function_supported"></a>

AWS Clean RoomsSpark SQL은 집계 및 순위라는 두 가지 유형의 창 함수를 지원합니다.

다음은 지원되는 집계 함수입니다.
+ [CUME\$1DIST 창 함수](WF_CUME_DIST.md)
+ [DENSE\$1RANK 창 함수](WF_DENSE_RANK.md)
+ [FIRST 창 함수](WF_FIRST.md)
+ [FIRST\$1VALUE 창 함수](WF_first_value.md)
+ [LAG 창 함수](WF_LAG.md) 
+ [LAST 창 함수](WF-LAST.md)
+ [LAST\$1VALUE 창 함수](WF_last_value.md)
+ [LEAD 창 함수](WF_LEAD.md) 

다음은 지원되는 순위 함수입니다.
+ [DENSE\$1RANK 창 함수](WF_DENSE_RANK.md) 
+ [PERCENT\$1RANK 창 함수](WF_PERCENT_RANK.md)
+ [RANK 창 함수](WF_RANK.md) 
+ [ROW\$1NUMBER 창 함수](WF_ROW_NUMBER.md)

## 창 함수 예제를 위한 샘플 테이블
<a name="Window_function_example"></a>

각 함수 설명과 함께 특정 창 함수 예제를 찾을 수도 있습니다. 일부 예는 다음 테이블과 같이 11개의 행이 포함된 WINSALES라는 테이블을 사용합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/clean-rooms/latest/sql-reference/Window_functions.html)

# CUME\$1DIST 창 함수
<a name="WF_CUME_DIST"></a>

창 또는 파티션에 속하는 값의 누적 분포를 계산합니다. 오름차순을 가정했을 때 누적 분포는 다음과 같은 공식으로 결정됩니다.

`count of rows with values <= x / count of rows in the window or partition`

여기에서 *x*는 ORDER BY 절에서 지정하는 열의 현재 행 값과 동일합니다. 다음은 위와 같은 공식의 사용을 나타내는 데이터 세트입니다.

```
Row#	Value	  Calculation    CUME_DIST
1        2500	   (1)/(5)	   0.2
2        2600	   (2)/(5)	   0.4
3        2800	   (3)/(5)	   0.6
4        2900	   (4)/(5)	   0.8
5        3100	   (5)/(5)	   1.0
```

반환 값의 범위는 0부터 1까지입니다(1 포함).

## 구문
<a name="WF_CUME_DIST-synopsis"></a>

```
CUME_DIST ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## 인수
<a name="WF_CUME_DIST-arguments"></a>

OVER  
창 파티션을 지정하는 절입니다. OVER 절에는 창 프레임 명세가 포함될 수 없습니다.

PARTITION BY *partition\$1expression*   
선택 사항. OVER 절에서 각 그룹의 레코드 범위를 설정하는 표현식입니다.

ORDER BY *order\$1list*   
누적 분포를 계산하기 위한 표현식입니다. 이 표현식은 숫자 데이터 형식을 갖거나, 혹은 묵시적으로 1로 변환될 수 있어야 합니다. 즉 ORDER BY가 생략되면 모든 행의 반환 값은 1입니다.  
ORDER BY에서 고유한 순서를 지정하지 않으면 행의 순서는 비확정적입니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](Window_functions.md#Examples_order_by_WF) 단원을 참조하십시오.

## 반환 타입
<a name="WF_CUME_DIST-returns"></a>

FLOAT8

## 예제
<a name="WF_CUME_DIST-examples"></a>

다음은 각 판매자의 수량 누적 분포를 계산하는 예입니다.

```
select sellerid, qty, cume_dist() 
over (partition by sellerid order by qty) 
from winsales;

sellerid   qty	   cume_dist
--------------------------------------------------
1         10.00	   0.33
1         10.64	   0.67
1         30.37	   1
3         10.04	   0.25
3         15.15	   0.5
3         20.75	   0.75
3         30.55	   1
2         20.09	   0.5
2         20.12	   1
4         10.12	   0.5
4         40.23	   1
```

요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

# DENSE\$1RANK 창 함수
<a name="WF_DENSE_RANK"></a>

DENSE\$1RANK 창 함수는 OVER 절의 ORDER BY 표현식을 기준으로 값 그룹에 속한 값의 순위를 결정합니다. PARTITION BY 절(옵션)이 존재하면 각 행 그룹의 순위가 재설정됩니다. 순위 기준 값이 같은 행은 순위도 동일하게 결정됩니다. DENSE\$1RANK 함수는 한 가지 측면에서 RANK와 다릅니다. 즉 2개 이상의 행에서 순위가 동일하면 순위 값의 순서에서도 빈 자리가 없습니다. 예를 들어 두 행의 순위가 1로 결정되면 다음 순위는 2입니다.

순위 함수에서는 동일한 쿼리라고 해도 PARTITION BY 절과 ORDER BY 절을 다르게 사용할 수 있습니다.

## 구문
<a name="WF_DENSE_RANK-synopsis"></a>

```
DENSE_RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 인수
<a name="WF_DENSE_RANK-arguments"></a>

( )   
함수에 인수가 없지만 빈 괄호가 필요합니다.

OVER   
DENSE\$1RANK 함수의 창 절입니다.

PARTITION BY *expr\$1list*   
선택 사항. 창을 정의하는 하나 이상의 표현식입니다.

ORDER BY *order\$1list*   
선택 사항. 순위 값의 기준이 되는 표현식입니다. PARTITION BY를 지정하지 않으면 ORDER BY가 전체 테이블을 사용합니다. 즉 ORDER BY가 생략되면 모든 행의 반환 값은 1입니다.  
ORDER BY에서 고유한 순서를 지정하지 않으면 행의 순서는 비확정적입니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](Window_functions.md#Examples_order_by_WF) 단원을 참조하십시오.

## 반환 타입
<a name="Supported_data_types_wf_dense_rank"></a>

INTEGER

## 예제
<a name="WF_DENSE_RANK-examples"></a>

다음 예에서는 판매 수량(내림차순)으로 테이블을 정렬하고 각 행에 밀집 순위와 정규 순위를 모두 할당합니다. 결과는 창 함수 결과를 적용한 후에 정렬됩니다.

```
select salesid, qty,
dense_rank() over(order by qty desc) as d_rnk,
rank() over(order by qty desc) as rnk
from winsales
order by 2,1;

salesid | qty | d_rnk | rnk
---------+-----+-------+-----
10001 |  10 |     5 |   8
10006 |  10 |     5 |   8
30001 |  10 |     5 |   8
40005 |  10 |     5 |   8
30003 |  15 |     4 |   7
20001 |  20 |     3 |   4
20002 |  20 |     3 |   4
30004 |  20 |     3 |   4
10005 |  30 |     2 |   2
30007 |  30 |     2 |   2
40001 |  40 |     1 |   1
(11 rows)
```

동일한 쿼리에서 DENSE\$1RANK와 RANK 함수를 함께 사용하여 같은 행 집합에 할당되는 순위의 차이를 기록합니다. 요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

다음 예에서는 SELLERID를 기준으로 테이블을 분할하여 수량에 따라 각 파티션의 순서(내림차순)를 지정한 후 밀집 순위를 각 행에 할당합니다. 결과는 창 함수 결과를 적용한 후에 정렬됩니다.

```
select salesid, sellerid, qty,
dense_rank() over(partition by sellerid order by qty desc) as d_rnk
from winsales
order by 2,3,1;

salesid | sellerid | qty | d_rnk
---------+----------+-----+-------
10001 |        1 |  10 |     2
10006 |        1 |  10 |     2
10005 |        1 |  30 |     1
20001 |        2 |  20 |     1
20002 |        2 |  20 |     1
30001 |        3 |  10 |     4
30003 |        3 |  15 |     3
30004 |        3 |  20 |     2
30007 |        3 |  30 |     1
40005 |        4 |  10 |     2
40001 |        4 |  40 |     1
(11 rows)
```

 요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

# FIRST 창 함수
<a name="WF_FIRST"></a>

 정렬된 행 집합이 주어지면 FIRST는 창 프레임의 첫 번째 행을 기준으로 지정된 표현식의 값을 반환합니다.

프레임의 마지막 행 선택에 대한 자세한 내용은 [LAST 창 함수](WF-LAST.md) 섹션을 참조하세요.

## 구문
<a name="WF_FIRST-synopsis"></a>

```
FIRST( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 인수
<a name="WF_FIRST-arguments"></a>

 *expression*   
 함수가 실행되는 대상 열 또는 표현식입니다.

IGNORE NULLS   
이 옵션을 FIRST와 함께 사용하면 함수는 프레임에서 NULL이 아닌 첫 번째 값(또는 모든 값이 NULL인 경우 NULL)을 반환합니다.

RESPECT NULLS   
 AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
함수에서 창 절을 삽입합니다.

PARTITION BY *expr\$1list*   
하나 이상의 표현식과 관련하여 함수의 창을 정의합니다.

ORDER BY *order\$1list*   
각 파티션의 행을 정렬합니다. PARTITION BY 절을 지정하지 않으면 ORDER BY가 전체 테이블을 정렬합니다. ORDER BY 절을 지정하면 *frame\$1clause* 역시 지정해야 합니다.  
FIRST 함수의 결과는 데이터 순서에 따라 달라집니다. 다음과 같은 경우 함수 결과는 비확정적입니다.  
+ ORDER BY 절이 지정되지 않고 파티션에 다른 표현식 값 2개가 포함된 경우 
+ 표현식이 ORDER BY 목록에서는 동일한 값이지만 다른 값으로 평가되는 경우 

 *frame\$1clause*   
집계 함수에서 ORDER BY 절이 사용되면 명시적인 프레임 절이 필요합니다. 프레임 절은 순서가 지정된 결과에 행 집합을 추가하거나 제거함으로써 함수의 창에 포함되는 행 집합을 정제하는 역할을 하며, ROWS 키워드와 관련 지정자로 구성됩니다. [창 함수 구문 요약](Window_functions.md#Window_function_synopsis)을(를) 참조하세요.

## 반환 타입
<a name="Supported_data_types_wf_first"></a>

이러한 함수는 기본 AWS Clean Rooms데이터 형식을 사용하는 표현식을 지원합니다. 반환 형식은 *expression* 데이터 형식과 동일합니다.

## 예제
<a name="WF_FIRST-examples"></a>

다음은 VENUE 테이블에서 각 장소의 좌석 수용 능력을 반환하는 예로서 함수 결과의 순서(내림차순)는 좌석 수용 능력에 따라 지정됩니다. FIRST 함수는 프레임의 첫 번째 행에 해당하는 장소의 이름을 선택하는 데 사용됩니다.이 경우 좌석 수가 가장 많은 행입니다. 결과가 주를 기준으로 분할되어 있으므로 VENUESTATE 값이 바뀌면 첫 번째 값도 새롭게 선택됩니다. 여기에서는 창 프레임의 경계가 없기 때문에 각 파티션의 행마다 선택되는 첫 번째 값이 동일합니다.

California를 예로 들면, `Qualcomm Stadium`의 좌석 수(`70561`)가 가장 높기 때문에 이 장소의 이름이 `CA` 파티션의 모든 행에 대한 첫 번째 값에 해당합니다.

```
select venuestate, venueseats, venuename,
first(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |         first
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Qualcomm Stadium
CA         |      69843 | Monster Park                   | Qualcomm Stadium
CA         |      63026 | McAfee Coliseum                | Qualcomm Stadium
CA         |      56000 | Dodger Stadium                 | Qualcomm Stadium
CA         |      45050 | Angel Stadium of Anaheim       | Qualcomm Stadium
CA         |      42445 | PETCO Park                     | Qualcomm Stadium
CA         |      41503 | AT&T Park                      | Qualcomm Stadium
CA         |      22000 | Shoreline Amphitheatre         | Qualcomm Stadium
CO         |      76125 | INVESCO Field                  | INVESCO Field
CO         |      50445 | Coors Field                    | INVESCO Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Dolphin Stadium
FL         |      73800 | Jacksonville Municipal Stadium | Dolphin Stadium
FL         |      65647 | Raymond James Stadium          | Dolphin Stadium
FL         |      36048 | Tropicana Field                | Dolphin Stadium
...
```

# FIRST\$1VALUE 창 함수
<a name="WF_first_value"></a>

 행 집합의 순서가 지정되었다고 가정할 때 FIRST VALUE 함수는 창 프레임의 첫 번째 행과 관련하여 지정된 표현식의 값을 반환합니다.

프레임의 마지막 행 선택에 대한 자세한 내용은 [LAST\$1VALUE 창 함수](WF_last_value.md) 섹션을 참조하세요.

## 구문
<a name="WF_first_value-synopsis"></a>

```
FIRST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 인수
<a name="WF_first_value-arguments"></a>

 *expression*   
 함수가 실행되는 대상 열 또는 표현식입니다.

IGNORE NULLS   
FIRST\$1VALUE에서 이 옵션을 사용하면 프레임에서 NULL이 아닌 첫 번째 값을 반환합니다(또는 모든 값이 NULL이면 NULL을 반환합니다).

RESPECT NULLS   
 AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
함수에서 창 절을 삽입합니다.

PARTITION BY *expr\$1list*   
하나 이상의 표현식과 관련하여 함수의 창을 정의합니다.

ORDER BY *order\$1list*   
각 파티션의 행을 정렬합니다. PARTITION BY 절을 지정하지 않으면 ORDER BY가 전체 테이블을 정렬합니다. ORDER BY 절을 지정하면 *frame\$1clause* 역시 지정해야 합니다.  
FIRST\$1VALUE 함수의 결과는 데이터 순서에 따라 결정됩니다. 다음과 같은 경우 함수 결과는 비확정적입니다.  
+ ORDER BY 절이 지정되지 않고 파티션에 다른 표현식 값 2개가 포함된 경우 
+ 표현식이 ORDER BY 목록에서는 동일한 값이지만 다른 값으로 평가되는 경우 

 *frame\$1clause*   
집계 함수에서 ORDER BY 절이 사용되면 명시적인 프레임 절이 필요합니다. 프레임 절은 순서가 지정된 결과에 행 집합을 추가하거나 제거함으로써 함수의 창에 포함되는 행 집합을 정제하는 역할을 하며, ROWS 키워드와 관련 지정자로 구성됩니다. [창 함수 구문 요약](Window_functions.md#Window_function_synopsis)을(를) 참조하세요.

## 반환 타입
<a name="Supported_data_types_wf_first_value"></a>

이러한 함수는 기본 AWS Clean Rooms데이터 형식을 사용하는 표현식을 지원합니다. 반환 형식은 *expression* 데이터 형식과 동일합니다.

## 예제
<a name="WF_first_value-examples"></a>

다음은 VENUE 테이블에서 각 장소의 좌석 수용 능력을 반환하는 예로서 함수 결과의 순서(내림차순)는 좌석 수용 능력에 따라 지정됩니다. FIRST\$1VALUE 함수는 프레임에서 첫 번째 행에 해당하는 장소의 이름을 선택할 때 사용됩니다. 이 경우에는 좌석 수가 가장 많은 행이 여기에 해당합니다. 결과가 주를 기준으로 분할되어 있으므로 VENUESTATE 값이 바뀌면 첫 번째 값도 새롭게 선택됩니다. 여기에서는 창 프레임의 경계가 없기 때문에 각 파티션의 행마다 선택되는 첫 번째 값이 동일합니다.

California를 예로 들면, `Qualcomm Stadium`의 좌석 수(`70561`)가 가장 높기 때문에 이 장소의 이름이 `CA` 파티션의 모든 행에 대한 첫 번째 값에 해당합니다.

```
select venuestate, venueseats, venuename,
first_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |         first_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Qualcomm Stadium
CA         |      69843 | Monster Park                   | Qualcomm Stadium
CA         |      63026 | McAfee Coliseum                | Qualcomm Stadium
CA         |      56000 | Dodger Stadium                 | Qualcomm Stadium
CA         |      45050 | Angel Stadium of Anaheim       | Qualcomm Stadium
CA         |      42445 | PETCO Park                     | Qualcomm Stadium
CA         |      41503 | AT&T Park                      | Qualcomm Stadium
CA         |      22000 | Shoreline Amphitheatre         | Qualcomm Stadium
CO         |      76125 | INVESCO Field                  | INVESCO Field
CO         |      50445 | Coors Field                    | INVESCO Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Dolphin Stadium
FL         |      73800 | Jacksonville Municipal Stadium | Dolphin Stadium
FL         |      65647 | Raymond James Stadium          | Dolphin Stadium
FL         |      36048 | Tropicana Field                | Dolphin Stadium
...
```

# LAG 창 함수
<a name="WF_LAG"></a>

 LAG 창 함수는 파티션에서 현재 행 위(앞)의 지정 오프셋에 위치한 행의 값을 반환합니다.

## 구문
<a name="WF_LAG-synopsis"></a>

```
LAG (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## 인수
<a name="WF_LAG-arguments"></a>

 *value\$1expr*   
 함수가 실행되는 대상 열 또는 표현식입니다.

 *Offset*   
 현재 행 앞으로 값을 반환할 행이 위치한 수를 지정하는 파라미터(옵션)입니다. 이 오프셋은 상수 정수 혹은 정수로 평가되는 표현식이 될 수 있습니다. 오프셋을 지정하지 않으면를 기본값`1`으로 AWS Clean Rooms사용합니다. 오프셋이 `0`이면 현재 행을 나타냅니다.

IGNORE NULLS   
가 사용할 행을 결정할 때 null 값을 건너뛰어야 함을 나타내는 선택적 사양AWS Clean Rooms입니다. IGNORE NULLS를 지정하지 않으면 NULL 값이 포함됩니다.  
NVL 또는 COALESCE 표현식을 사용하여 NULL 값을 다른 값으로 변경할 수도 있습니다.

RESPECT NULLS   
 AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
창 파티션 및 순서를 지정합니다. OVER 절에는 창 프레임 명세가 포함될 수 없습니다.

PARTITION BY *window\$1partition*   
OVER 절에서 각 그룹의 레코드 범위를 설정하는 인수(옵션)입니다.

ORDER BY *window\$1ordering*   
각 파티션의 행을 정렬합니다.

LAG 창 함수는 모든 AWS Clean Rooms데이터 유형을 사용하는 표현식을 지원합니다. 반환 형식은 *value\$1expr* 형식과 동일합니다.

## 예제
<a name="WF_LAG-examples"></a>

 다음은 구매자 ID가 3인 구매자에게 팔린 티켓 수량과 구매자 3이 티켓을 구입한 시간을 나타내는 예입니다. 쿼리가 구매자 3의 각 판매 수량을 이전 판매 수량과 비교할 수 있도록 각 판매 수량에 대한 이전 판매 수량을 반환합니다. 2008년 1월 16일 이전에는 구매 기록이 없기 때문에 이전 판매 수량의 첫 번째 값은 NULL입니다.

```
select buyerid, saletime, qtysold,
lag(qtysold,1) over (order by buyerid, saletime) as prev_qtysold
from sales where buyerid = 3 order by buyerid, saletime;

buyerid |      saletime       | qtysold | prev_qtysold
---------+---------------------+---------+--------------
3 | 2008-01-16 01:06:09 |       1 |
3 | 2008-01-28 02:10:01 |       1 |            1
3 | 2008-03-12 10:39:53 |       1 |            1
3 | 2008-03-13 02:56:07 |       1 |            1
3 | 2008-03-29 08:21:39 |       2 |            1
3 | 2008-04-27 02:39:01 |       1 |            2
3 | 2008-08-16 07:04:37 |       2 |            1
3 | 2008-08-22 11:45:26 |       2 |            2
3 | 2008-09-12 09:11:25 |       1 |            2
3 | 2008-10-01 06:22:37 |       1 |            1
3 | 2008-10-20 01:55:51 |       2 |            1
3 | 2008-10-28 01:30:40 |       1 |            2
(12 rows)
```

# LAST 창 함수
<a name="WF-LAST"></a>

 정렬된 행 집합이 주어지면 LAST 함수는 프레임의 마지막 행을 기준으로 표현식 값을 반환합니다.

프레임의 첫 번째 행 선택에 대한 자세한 내용은 [FIRST 창 함수](WF_FIRST.md) 섹션을 참조하세요.

## 구문
<a name="WF-LAST-syntax"></a>

```
LAST( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 인수
<a name="WF-LAST-arguments"></a>

 *expression*   
 함수가 실행되는 대상 열 또는 표현식입니다.

IGNORE NULLS   
프레임에서 NULL이 아닌 마지막 값을 반환합니다(또는 모든 값이 NULL이면 NULL을 반환합니다).

RESPECT NULLS   
AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
함수에서 창 절을 삽입합니다.

PARTITION BY *expr\$1list*   
하나 이상의 표현식과 관련하여 함수의 창을 정의합니다.

ORDER BY *order\$1list*   
각 파티션의 행을 정렬합니다. PARTITION BY 절을 지정하지 않으면 ORDER BY가 전체 테이블을 정렬합니다. ORDER BY 절을 지정하면 *frame\$1clause* 역시 지정해야 합니다.  
결과는 데이터 순서에 따라 달라집니다. 다음과 같은 경우 함수 결과는 비확정적입니다.  
+ ORDER BY 절이 지정되지 않고 파티션에 다른 표현식 값 2개가 포함된 경우 
+ 표현식이 ORDER BY 목록에서는 동일한 값이지만 다른 값으로 평가되는 경우 

 *frame\$1clause*   
집계 함수에서 ORDER BY 절이 사용되면 명시적인 프레임 절이 필요합니다. 프레임 절은 순서가 지정된 결과에 행 집합을 추가하거나 제거함으로써 함수의 창에 포함되는 행 집합을 정제하는 역할을 하며, ROWS 키워드와 관련 지정자로 구성됩니다. [창 함수 구문 요약](Window_functions.md#Window_function_synopsis)을(를) 참조하세요.

## 반환 타입
<a name="WF-LAST-return-type"></a>

이러한 함수는 기본 AWS Clean Rooms데이터 형식을 사용하는 표현식을 지원합니다. 반환 형식은 *expression* 데이터 형식과 동일합니다.

## 예제
<a name="WF-LAST-examples"></a>

다음은 VENUE 테이블에서 각 장소의 좌석 수용 능력을 반환하는 예로서 함수 결과의 순서(내림차순)는 좌석 수용 능력에 따라 지정됩니다. LAST 함수는 프레임의 마지막 행에 해당하는 장소의 이름을 선택하는 데 사용됩니다.이 경우 좌석 수가 가장 적은 행입니다. 결과가 주를 기준으로 분할되어 있으므로 VENUESTATE 값이 바뀌면 마지막 값도 새롭게 선택됩니다. 여기에서는 창 프레임의 경계가 없기 때문에 각 파티션의 행마다 선택되는 마지막 값이 동일합니다.

California를 보면, 파티션의 모든 행에 대해서 좌석 수(`Shoreline Amphitheatre`)가 가장 적은 `22000`가 반환됩니다.

```
select venuestate, venueseats, venuename,
last(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |          last
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Shoreline Amphitheatre
CA         |      69843 | Monster Park                   | Shoreline Amphitheatre
CA         |      63026 | McAfee Coliseum                | Shoreline Amphitheatre
CA         |      56000 | Dodger Stadium                 | Shoreline Amphitheatre
CA         |      45050 | Angel Stadium of Anaheim       | Shoreline Amphitheatre
CA         |      42445 | PETCO Park                     | Shoreline Amphitheatre
CA         |      41503 | AT&T Park                      | Shoreline Amphitheatre
CA         |      22000 | Shoreline Amphitheatre         | Shoreline Amphitheatre
CO         |      76125 | INVESCO Field                  | Coors Field
CO         |      50445 | Coors Field                    | Coors Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Tropicana Field
FL         |      73800 | Jacksonville Municipal Stadium | Tropicana Field
FL         |      65647 | Raymond James Stadium          | Tropicana Field
FL         |      36048 | Tropicana Field                | Tropicana Field
...
```

# LAST\$1VALUE 창 함수
<a name="WF_last_value"></a>

 행 집합의 순서가 지정되었다고 가정할 때 LAST VALUE 함수는 프레임의 마지막 행과 관련하여 표현식의 값을 반환합니다.

프레임의 첫 번째 행 선택에 대한 자세한 내용은 [FIRST\$1VALUE 창 함수](WF_first_value.md) 섹션을 참조하세요.

## 구문
<a name="WF_last_value-synopsis"></a>

```
LAST_VALUE( expression )[ IGNORE NULLS | RESPECT NULLS ]
OVER (
[ PARTITION BY expr_list ]
[ ORDER BY order_list frame_clause ]
)
```

## 인수
<a name="WF_last_value-arguments"></a>

 *expression*   
 함수가 실행되는 대상 열 또는 표현식입니다.

IGNORE NULLS   
프레임에서 NULL이 아닌 마지막 값을 반환합니다(또는 모든 값이 NULL이면 NULL을 반환합니다).

RESPECT NULLS   
AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
함수에서 창 절을 삽입합니다.

PARTITION BY *expr\$1list*   
하나 이상의 표현식과 관련하여 함수의 창을 정의합니다.

ORDER BY *order\$1list*   
각 파티션의 행을 정렬합니다. PARTITION BY 절을 지정하지 않으면 ORDER BY가 전체 테이블을 정렬합니다. ORDER BY 절을 지정하면 *frame\$1clause* 역시 지정해야 합니다.  
결과는 데이터 순서에 따라 달라집니다. 다음과 같은 경우 함수 결과는 비확정적입니다.  
+ ORDER BY 절이 지정되지 않고 파티션에 다른 표현식 값 2개가 포함된 경우 
+ 표현식이 ORDER BY 목록에서는 동일한 값이지만 다른 값으로 평가되는 경우 

 *frame\$1clause*   
집계 함수에서 ORDER BY 절이 사용되면 명시적인 프레임 절이 필요합니다. 프레임 절은 순서가 지정된 결과에 행 집합을 추가하거나 제거함으로써 함수의 창에 포함되는 행 집합을 정제하는 역할을 하며, ROWS 키워드와 관련 지정자로 구성됩니다. [창 함수 구문 요약](Window_functions.md#Window_function_synopsis)을(를) 참조하세요.

## 반환 타입
<a name="Supported_data_types_wf_last_value"></a>

이러한 함수는 기본 AWS Clean Rooms데이터 형식을 사용하는 표현식을 지원합니다. 반환 형식은 *expression* 데이터 형식과 동일합니다.

## 예제
<a name="WF_last_value-examples"></a>

다음은 VENUE 테이블에서 각 장소의 좌석 수용 능력을 반환하는 예로서 함수 결과의 순서(내림차순)는 좌석 수용 능력에 따라 지정됩니다. LAST\$1VALUE 함수는 프레임에서 마지막 행에 해당하는 장소의 이름을 선택할 때 사용됩니다. 이 경우에는 좌석 수가 가장 적은 행이 여기에 해당합니다. 결과가 주를 기준으로 분할되어 있으므로 VENUESTATE 값이 바뀌면 마지막 값도 새롭게 선택됩니다. 여기에서는 창 프레임의 경계가 없기 때문에 각 파티션의 행마다 선택되는 마지막 값이 동일합니다.

California를 보면, 파티션의 모든 행에 대해서 좌석 수(`Shoreline Amphitheatre`)가 가장 적은 `22000`가 반환됩니다.

```
select venuestate, venueseats, venuename,
last_value(venuename)
over(partition by venuestate
order by venueseats desc
rows between unbounded preceding and unbounded following)
from (select * from venue where venueseats >0)
order by venuestate;

venuestate | venueseats |           venuename            |          last_value
-----------+------------+--------------------------------+------------------------------
CA         |      70561 | Qualcomm Stadium               | Shoreline Amphitheatre
CA         |      69843 | Monster Park                   | Shoreline Amphitheatre
CA         |      63026 | McAfee Coliseum                | Shoreline Amphitheatre
CA         |      56000 | Dodger Stadium                 | Shoreline Amphitheatre
CA         |      45050 | Angel Stadium of Anaheim       | Shoreline Amphitheatre
CA         |      42445 | PETCO Park                     | Shoreline Amphitheatre
CA         |      41503 | AT&T Park                      | Shoreline Amphitheatre
CA         |      22000 | Shoreline Amphitheatre         | Shoreline Amphitheatre
CO         |      76125 | INVESCO Field                  | Coors Field
CO         |      50445 | Coors Field                    | Coors Field
DC         |      41888 | Nationals Park                 | Nationals Park
FL         |      74916 | Dolphin Stadium                | Tropicana Field
FL         |      73800 | Jacksonville Municipal Stadium | Tropicana Field
FL         |      65647 | Raymond James Stadium          | Tropicana Field
FL         |      36048 | Tropicana Field                | Tropicana Field
...
```

# LEAD 창 함수
<a name="WF_LEAD"></a>

 LEAD 창 함수는 파티션에서 현재 행 아래(뒤)의 지정 오프셋에 위치한 행의 값을 반환합니다.

## 구문
<a name="WF_LEAD-synopsis"></a>

```
LEAD (value_expr [, offset ])
[ IGNORE NULLS | RESPECT NULLS ]
OVER ( [ PARTITION BY window_partition ] ORDER BY window_ordering )
```

## 인수
<a name="WF_LEAD-arguments"></a>

 *value\$1expr*   
함수가 실행되는 대상 열 또는 표현식입니다.

 *Offset*   
 현재 행 아래로 값을 반환할 행이 위치한 수를 지정하는 파라미터(옵션)입니다. 이 오프셋은 상수 정수 혹은 정수로 평가되는 표현식이 될 수 있습니다. 오프셋을 지정하지 않으면를 기본값`1`으로 AWS Clean Rooms사용합니다. 오프셋이 `0`이면 현재 행을 나타냅니다.

IGNORE NULLS   
가 사용할 행을 결정할 때 null 값을 건너뛰어야 함을 나타내는 선택적 사양AWS Clean Rooms입니다. IGNORE NULLS를 지정하지 않으면 NULL 값이 포함됩니다.  
NVL 또는 COALESCE 표현식을 사용하여 NULL 값을 다른 값으로 변경할 수도 있습니다.

RESPECT NULLS   
 AWS Clean Rooms가 사용할 행을 결정할 때 null 값을 포함해야 함을 나타냅니다. RESPECT NULLS는 IGNORE NULLS를 지정하지 않은 경우 기본적으로 지원됩니다.

OVER   
창 파티션 및 순서를 지정합니다. OVER 절에는 창 프레임 명세가 포함될 수 없습니다.

PARTITION BY *window\$1partition*   
OVER 절에서 각 그룹의 레코드 범위를 설정하는 인수(옵션)입니다.

ORDER BY *window\$1ordering*   
각 파티션의 행을 정렬합니다.

LEAD 창 함수는 모든 AWS Clean Rooms데이터 유형을 사용하는 표현식을 지원합니다. 반환 형식은 *value\$1expr* 형식과 동일합니다.

## 예제
<a name="WF_LEAD-examples"></a>

 다음은 SALES 테이블의 이벤트에 대해 2008년 1월 1일과 동년 1월 2일에 판매된 티켓 수수료와 후속 티켓 판매 수수료를 나타낸 예입니다.

```
select eventid, commission, saletime,
lead(commission, 1) over (order by saletime) as next_comm
from sales where saletime between '2008-01-01 00:00:00' and '2008-01-02 12:59:59'
order by saletime;

eventid | commission |      saletime       | next_comm
---------+------------+---------------------+-----------
6213 |      52.05 | 2008-01-01 01:00:19 |    106.20
7003 |     106.20 | 2008-01-01 02:30:52 |    103.20
8762 |     103.20 | 2008-01-01 03:50:02 |     70.80
1150 |      70.80 | 2008-01-01 06:06:57 |     50.55
1749 |      50.55 | 2008-01-01 07:05:02 |    125.40
8649 |     125.40 | 2008-01-01 07:26:20 |     35.10
2903 |      35.10 | 2008-01-01 09:41:06 |    259.50
6605 |     259.50 | 2008-01-01 12:50:55 |    628.80
6870 |     628.80 | 2008-01-01 12:59:34 |     74.10
6977 |      74.10 | 2008-01-02 01:11:16 |     13.50
4650 |      13.50 | 2008-01-02 01:40:59 |     26.55
4515 |      26.55 | 2008-01-02 01:52:35 |     22.80
5465 |      22.80 | 2008-01-02 02:28:01 |     45.60
5465 |      45.60 | 2008-01-02 02:28:02 |     53.10
7003 |      53.10 | 2008-01-02 02:31:12 |     70.35
4124 |      70.35 | 2008-01-02 03:12:50 |     36.15
1673 |      36.15 | 2008-01-02 03:15:00 |   1300.80
...
(39 rows)
```

# PERCENT\$1RANK 창 함수
<a name="WF_PERCENT_RANK"></a>

임의의 행의 백분율 순위를 계산합니다. 백분율 순위를 구하는 공식은 다음과 같습니다.

`(x - 1) / (the number of rows in the window or partition - 1)`

여기에서 *x*는 현재 행의 순위입니다. 다음은 위와 같은 공식의 사용을 나타내는 데이터 세트입니다.

```
Row#	Value	Rank	Calculation	PERCENT_RANK
1	15	1	(1-1)/(7-1)	0.0000
2	20	2	(2-1)/(7-1)	0.1666
3	20	2	(2-1)/(7-1)	0.1666
4	20	2	(2-1)/(7-1)	0.1666
5	30	5	(5-1)/(7-1)	0.6666
6	30	5	(5-1)/(7-1)	0.6666
7	40	7	(7-1)/(7-1)	1.0000
```

반환 값의 범위는 0부터 1까지입니다(0과 1 포함). 모든 집합에서 첫 번째 행은 PERCENT\$1RANK가 0입니다.

## 구문
<a name="WF_PERCENT_RANK-synopsis"></a>

```
PERCENT_RANK ()
OVER ( 
[ PARTITION BY partition_expression ] 
[ ORDER BY order_list ]
)
```

## 인수
<a name="WF_PERCENT_RANK-arguments"></a>

( )   
함수에 인수가 없지만 빈 괄호가 필요합니다.

OVER  
창 파티션을 지정하는 절입니다. OVER 절에는 창 프레임 명세가 포함될 수 없습니다.

PARTITION BY *partition\$1expression*   
선택 사항. OVER 절에서 각 그룹의 레코드 범위를 설정하는 표현식입니다.

ORDER BY *order\$1list*   
선택 사항. 백분율 순위를 계산하기 위한 표현식입니다. 이 표현식은 숫자 데이터 형식을 갖거나, 혹은 묵시적으로 1로 변환될 수 있어야 합니다. 즉 ORDER BY가 생략되면 모든 행의 반환 값은 0입니다.  
ORDER BY에서 고유한 순서를 지정하지 않으면 행의 순서는 비확정적입니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](Window_functions.md#Examples_order_by_WF) 단원을 참조하십시오.

## 반환 타입
<a name="WF_PERCENT_RANK-return-type"></a>

FLOAT8

## 예제
<a name="WF_PERCENT_RANK-examples"></a>

다음은 각 판매자의 판매 수량에 대한 백분율 순위를 계산하는 예입니다.

```
select sellerid, qty, percent_rank() 
over (partition by sellerid order by qty) 
from winsales;

sellerid	qty		percent_rank
----------------------------------------
1		10.00		0.0
1		10.64		0.5
1		30.37		1.0
3		10.04		0.0
3		15.15		0.33
3		20.75		0.67
3		30.55		1.0
2		20.09		0.0
2		20.12		1.0
4		10.12		0.0
4		40.23		1.0
```

요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

# RANK 창 함수
<a name="WF_RANK"></a>

 RANK 창 함수는 OVER 절의 ORDER BY 표현식을 기준으로 값 그룹에 속한 값의 순위를 결정합니다. PARTITION BY 절(옵션)이 존재하면 각 행 그룹의 순위가 재설정됩니다. 순위 기준 값이 같은 행은 동일한 순위를 받습니다.는 묶인 행 수를 묶인 순위에 AWS Clean Rooms추가하여 다음 순위를 계산하므로 순위가 연속된 숫자가 아닐 수 있습니다. 예를 들어 두 행의 순위가 1로 결정되면 다음 순위는 3입니다.

 RANK는 한 가지 측면에서 [DENSE\$1RANK 창 함수](WF_DENSE_RANK.md)와 다릅니다. 즉 DENSE\$1RANK에서는 2개 이상의 행에서 순위가 동일하면 순위 값의 순서에서도 빈 자리가 없습니다. 예를 들어 두 행의 순위가 1로 결정되면 다음 순위는 2입니다.

순위 함수에서는 동일한 쿼리라고 해도 PARTITION BY 절과 ORDER BY 절을 다르게 사용할 수 있습니다.

## 구문
<a name="WF_RANK-synopsis"></a>

```
RANK () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 인수
<a name="WF_RANK-arguments"></a>

( )   
함수에 인수가 없지만 빈 괄호가 필요합니다.

OVER   
RANK 함수의 창 절입니다.

PARTITION BY *expr\$1list*   
선택 사항. 창을 정의하는 하나 이상의 표현식입니다.

ORDER BY *order\$1list*   
선택 사항. 순위 값의 기준이 되는 열을 정의합니다. PARTITION BY를 지정하지 않으면 ORDER BY가 전체 테이블을 사용합니다. 즉 ORDER BY가 생략되면 모든 행의 반환 값은 1입니다.  
ORDER BY에서 고유한 순서를 지정하지 않으면 행의 순서는 비확정적입니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](Window_functions.md#Examples_order_by_WF) 단원을 참조하십시오.

## 반환 타입
<a name="Supported_data_types_wf_rank"></a>

INTEGER

## 예제
<a name="WF_RANK-examples"></a>

다음 예에서는 판매 수량에 따라 테이블의 순서(기본 오름차순)를 지정한 후 각 행마다 순위를 할당합니다. 순위 값 1은 가장 높은 순위의 값입니다. 결과는 창 함수 결과를 적용한 후에 정렬됩니다: 

```
select salesid, qty,
rank() over (order by qty) as rnk
from winsales
order by 2,1;

salesid | qty | rnk
--------+-----+-----
10001 |  10 |  1
10006 |  10 |  1
30001 |  10 |  1
40005 |  10 |  1
30003 |  15 |  5
20001 |  20 |  6
20002 |  20 |  6
30004 |  20 |  6
10005 |  30 |  9
30007 |  30 |  9
40001 |  40 |  11
(11 rows)
```

이 예제의 외부 ORDER BY 절에는이 쿼리가 실행될 때마다가 일관되게 정렬된 결과를 AWS Clean Rooms반환하도록 하는 2열과 1열이 포함되어 있습니다. 예를 들어 판매 ID가 10001과 10006인 행은 QTY 및 RNK 값이 동일합니다. 이때 열 1에 따라 최종 결과 집합의 순서를 지정하면 10001 행이 항상 10006 행보다 앞에 위치할 수 있습니다. 요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

다음 예에서는 창 함수(`order by qty desc`)의 순서가 반전됩니다. 여기에서는 최고 순위 값이 가장 큰 QTY 값에 적용됩니다.

```
select salesid, qty,
rank() over (order by qty desc) as rank
from winsales
order by 2,1;

 salesid | qty | rank
---------+-----+-----
   10001 |  10 |   8
   10006 |  10 |   8
   30001 |  10 |   8
   40005 |  10 |   8
   30003 |  15 |   7
   20001 |  20 |   4
   20002 |  20 |   4
   30004 |  20 |   4
   10005 |  30 |   2
   30007 |  30 |   2
   40001 |  40 |   1
(11 rows)
```

요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.

다음 예에서는 SELLERID를 기준으로 테이블을 분할하여 수량에 따라 각 파티션의 순서(내림차순)를 지정한 후 순위를 각 행에 할당합니다. 결과는 창 함수 결과를 적용한 후에 정렬됩니다.

```
select salesid, sellerid, qty, rank() over
(partition by sellerid
order by qty desc) as rank
from winsales
order by 2,3,1;

salesid | sellerid | qty | rank
--------+----------+-----+-----
  10001 |        1 |  10 |  2
  10006 |        1 |  10 |  2
  10005 |        1 |  30 |  1
  20001 |        2 |  20 |  1
  20002 |        2 |  20 |  1
  30001 |        3 |  10 |  4
  30003 |        3 |  15 |  3
  30004 |        3 |  20 |  2
  30007 |        3 |  30 |  1
  40005 |        4 |  10 |  2
  40001 |        4 |  40 |  1
(11 rows)
```

# ROW\$1NUMBER 창 함수
<a name="WF_ROW_NUMBER"></a>

OVER 절의 ORDER BY 표현식을 기준으로 행 그룹 내에서 1부터 현재 행의 서수를 결정합니다. PARTITION BY 절(옵션)이 존재하면 각 행 그룹의 서수가 재설정됩니다. ORDER BY 표현식 값이 동일한 행이라고 해도 비확정적으로 다른 행 번호를 받습니다.

## 구문
<a name="WF_ROW_NUMBER-synopsis"></a>

```
ROW_NUMBER () OVER
(
[ PARTITION BY expr_list ]
[ ORDER BY order_list ]
)
```

## 인수
<a name="WF_ROW_NUMBER-arguments"></a>

( )   
함수에 인수가 없지만 빈 괄호가 필요합니다.

OVER   
ROW\$1NUMBER 함수의 창 절입니다.

PARTITION BY *expr\$1list*   
선택 사항. ROW\$1NUMBER 함수를 정의하는 하나 이상의 표현식입니다.

ORDER BY *order\$1list*   
선택 사항. 행 번호의 기준이 되는 열을 정의한 표현식입니다. PARTITION BY를 지정하지 않으면 ORDER BY가 전체 테이블을 사용합니다.  
ORDER BY가 고유한 순서를 지정하지 않거나 생략되면 행의 순서는 비확정적입니다. 자세한 내용은 [창 함수 데이터에 대한 고유 순서 지정](Window_functions.md#Examples_order_by_WF) 단원을 참조하십시오.

## 반환 타입
<a name="Supported_data_types_WF_ROW_NUMBER"></a>

BIGINT

## 예제
<a name="WF_ROW_NUMBER-examples"></a>

다음은 SELLERID를 기준으로 테이블을 분할하여 수량에 따라 각 파티션의 순서(오름차순)를 지정한 후 행 번호를 각 행에 할당하는 예입니다. 결과는 창 함수 결과를 적용한 후에 정렬됩니다.

```
select salesid, sellerid, qty, 
row_number() over 
(partition by sellerid
 order by qty asc) as row
from winsales
order by 2,4;

 salesid | sellerid | qty | row
---------+----------+-----+-----
   10006 |        1 |  10 |   1
   10001 |        1 |  10 |   2
   10005 |        1 |  30 |   3
   20001 |        2 |  20 |   1
   20002 |        2 |  20 |   2
   30001 |        3 |  10 |   1
   30003 |        3 |  15 |   2
   30004 |        3 |  20 |   3
   30007 |        3 |  30 |   4
   40005 |        4 |  10 |   1
   40001 |        4 |  40 |   2
(11 rows)
```

 요청 데이터에 대한 설명은 [창 함수 예제를 위한 샘플 테이블](Window_functions.md#Window_function_example) 섹션을 참조하세요.