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 |