기회의 창을 살펴보세요
SQL 창 함수에 대해 처음 들었을 때부터 저는 항상 그것이 얼마나 강력한지 놀랐습니다. 또한 내 서클의 많은 사람들이 그것을 어디서 어떻게 사용하는지 이해하지 못한다는 것을 알게 되었습니다.
따라서 SQL Window 함수가 무엇인지, 어디에 사용할 수 있는지 등을 설명하는 일련의 기사를 작성하기로 결정했습니다.
예제를 더 재미있고 쉽게 복제할 수 있도록 하기 위해 Google COVID-19 BigQuery Dataset의 데이터를 분석하여 COVID-19 전염병에 대한 질문에 답할 것입니다.
특히
bigquery-public-data.covid19_ecdc.covid_19_geographic_distribution_worldwide
테이블.몇 가지 정의를 이해함으로써 여행을 시작합시다.
SQL 창 함수란?
창 함수는 집계되지 않은 데이터를 단일 행으로 그룹화하지 않고 집계를 수행하는 데 사용됩니다. 또한 현재 행에 상대적인 계산(예: 누계/평균)을 수행하는 데 사용됩니다.
PostgreSQL 설명서의 보다 완전한 정의는 다음과 같습니다.
A window function performs a calculation across a set of table rows that are somehow related to the current row. This is comparable to the type of calculation that can be done with an aggregate function. But unlike regular aggregate functions, use of a window function does not cause rows to become grouped into a single output row — the rows retain their separate identities. Behind the scenes, the window function is able to access more than just the current row of the query result.
언제 사용해야합니까?
위의 정의를 이해하는 가장 좋은 방법은 창 함수의 일부 사용 사례를 살펴보는 것입니다. 다음과 같은 경우에 유용합니다.
시리즈의 후속 기사에서 이에 대해 자세히 살펴보겠습니다. 지금은 창 함수가 있는 쿼리의 기본 구조를 살펴보겠습니다.
창 함수의 구문
창 함수는 SQL 쿼리에서 열을 지정하는 것과 같은 방식으로 만들 수 있습니다. 주요 차이점은 OVER 절을 사용하여 그것이 창 함수임을 지정한다는 것입니다.
SELECT
_agg_func_call_ OVER([window_aggs]) AS col_name,
other_col_1,
other_col_2,
...,
other_col_n
FROM _table_name_
[other_select parts]
보시다시피 윈도우 함수는 SELECT 문의 일부입니다. SQL은 OVER() 함수가 있으면 윈도우 함수임을 안다.
여기서 agg_func_call은 AVG, MIN, MAX, SUM 등의 집계 함수일 수 있습니다.
Note:
One very important thing to bear in mind here is the order of operations of an SQL statement and when the Window functions are called. The order of operation is as follows
- FROM and JOINs
- WHERE
- GROUP BY
- HAVING
- SELECT (this is when our window functions run)
- DISTINCT
- ORDER BY
- LIMIT/OFFSET
Thus, our Window functions can access the ResultSet after the HAVING. As we would see in subsequent articles, whenever we have to choose between a window function and a solution, the window function would usually be faster.
This is because a performs its calculation by running through the entire table while a window function performs calculation with ResultSet produced from the WHERE clause.
OVER 함수 인수
OVER 함수는 선택적으로 일부 인수를 사용합니다.
OVER() 함수 인수의 전체 구문은 다음과 같습니다.
OVER(
[PARTITION BY args]
[ORDER BY args]
[{ROWS| ROWS BETWEEN} args]
)
col_1, ..., col_n으로 주문
이는 SELECT 문의 끝에 사용될 때와 동일한 구문을 갖습니다.
그러나 창 함수에서는 창 함수에서 사용할 ResultSet을 정렬합니다. 나중에 이에 대한 예를 보게 될 것입니다.
[ROWS 행_인수| ROWS BETWEEN starting_row BETWEEN ending_row]
현재 행을 기준으로 계산을 수행하는 데 사용됩니다. 이전/다음 행 값(예: 선행 합계/평균, 사례의 일일 상승 등)에 상대적인 집계를 수행할 때 매우 편리합니다.
파티션 기준
데이터를 더 많은 창으로 나누는 데 사용됩니다. 이는 결과 집합을 더 작은 '창'으로 나누고 해당 창 내에서 계산을 수행하려는 일부 복잡한 계산에 유용합니다.
이것의 예는 말보다 이런 식으로 더 잘 설명할 것입니다.
이것이 바로 이 시리즈에서 기대해야 하는 것입니다. 재미있게 읽으시길 바랍니다.
시리즈의 다음은 집계 데이터와 집계되지 않은 데이터 비교입니다. 거기서 보자!
Reference
이 문제에 관하여(기회의 창을 살펴보세요), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/chidioguejiofor/watch-over-your-window-of-opportunities-320l텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)