본문 바로가기
Big Data/Database

WINDOW 절의 사용

by Wikinist 2023. 7. 27.

SQL 쿼리의 일반적인 구조는 다음과 같습니다.

SELECT <columns>
FROM <table>
<JOINs or other clauses>
<WHERE condition>
<GROUP BY columns>
<HAVING condition>
<WINDOW clause>
<ORDER BY columns>;


따라서 WINDOW 절은 GROUP BY 절과 ORDER BY 절 사이에 위치합니다. WINDOW 절은 윈도우 함수의 계산 범위를 정의하므로, GROUP BY 절 다음에 올 수 있습니다. 그리고 윈도우 함수는 SELECT 절의 열들을 기반으로 계산되기 때문에, SELECT 절의 마지막에 위치합니다.

예제 테이블: sales

sale_id sale_date amount
1 2023-07-01 100
2 2023-07-02 150
3 2023-07-03 200
4 2023-07-04 120
5 2023-07-05 180

이제 아래의 SQL 쿼리를 사용하여 주문 테이블에서 일별 매출의 합계와 해당 일 기준으로 이전 하루와 다음 하루의 매출 합계를 계산해보겠습니다.

SELECT 
    sale_date,
    SUM(amount) AS daily_sales,
    LAG(SUM(amount)) OVER (ORDER BY sale_date) AS previous_day_sales,
    LEAD(SUM(amount)) OVER (ORDER BY sale_date) AS next_day_sales
FROM 
    sales
GROUP BY 
    sale_date
WINDOW w AS (ORDER BY sale_date
             ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING)
ORDER BY 
    sale_date;

위 쿼리에서 WINDOW 절은 GROUP BY 절 다음에 위치하고 있습니다. LAG 함수와 LEAD 함수를 사용하여 각 날짜별 매출의 합계와 이전 하루, 다음 하루의 매출 합계를 계산하는데, WINDOW 절을 사용하여 이전 하루와 다음 하루의 범위를 정의하고 있습니다.

결과는 다음과 같이 나올 것입니다.

sale_date daily_sales previous_day_sales next_day_sales
2023-07-01 100 NULL 150
2023-07-02 150 100 200
2023-07-03 200 150 120
2023-07-04 120 200 180
2023-07-05 180 120 NULL

위 결과에서 확인할 수 있듯이, WINDOW 절을 사용하여 각 날짜별로 이전 하루와 다음 하루의 매출 합계를 계산하고 있습니다. 이렇게 WINDOW 절을 사용하면 윈도우 함수를 적용하여 원하는 분석 결과를 얻을 수 있습니다.

해당 게시글은 ChatGPT의 도움을 받아 작성되었습니다.

'Big Data > Database' 카테고리의 다른 글

MySQL에서 UnixTime  (0) 2023.07.31
LAG & LEAD 함수  (0) 2023.07.27
분석 함수(Analytic Functions)  (0) 2023.07.27
싱글 쿼터('), 더블 쿼터('')  (0) 2023.07.27
날짜 관련 함수  (0) 2023.07.26