Khung cửa sổ

Window Functions trong Snowflake

Jake Roach

Field Data Engineer

Khung cửa sổ

Kết quả hiển thị một cửa sổ gồm tất cả bản ghi.

Window Functions trong Snowflake

Khung cửa sổ

Kết quả cho thấy các cửa sổ được tạo bằng cách phân vùng theo trường member_id.

Window Functions trong Snowflake

Khung cửa sổ động

Kết quả cho thấy một khung cửa sổ "trượt".

Window Functions trong Snowflake

Tìm phép tính lũy kế

SELECT
    ...

    AVG(<1>) OVER(
        PARTITION BY ...
        ORDER BY <2>

        -- Cửa sổ giữa hàng đầu
        -- và hàng hiện tại

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) ...

ROWS BETWEEN cho phép tạo khung cửa sổ động

  • UNBOUNDED PRECEEDING AND CURRENT ROW
  • Từ hàng đầu trong chuỗi đến hàng hiện tại
  • Tính toán “lũy kế”, không phải “cuộn”
  • CURRENT ROW AND UNBOUNDED FOLLOWING

$$

<1>: trường để tính toán

<2>: sắp xếp kết quả, dựng khung cửa sổ

Window Functions trong Snowflake

Tổng lũy kế calo tiêu hao

SELECT
    member_id AS m_id, 
    calories_burned AS cb,

    -- Tổng lũy kế!
    SUM(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
) AS running_total FROM fitness.workouts;

         m_id  |    cb   |  running_total
       ------- | ------- | --------------
        m_192  |   105   |      105 
        m_192  |   156   |      261 
        m_192  |    69   |      330 
        m_192  |   102   |      432  

        m_74   |   374   |      374  
        m_74   |   396   |      770  
        m_74   |   504   |     1274  

        m_233  |    51   |       51  
        m_233  |    81   |      132  

Window Functions trong Snowflake

CURRENT ROW AND UNBOUNDED FOLLOWING

SELECT
    member_id AS m_id, 
    calories_burned AS cb,

    SUM(calories_burned) OVER(
        PARTITION BY member_id
        ORDER BY workout_date

        -- Cửa sổ từ hàng hiện tại đến hàng cuối

ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING
) AS left_to_burn FROM fitness.workouts;

         m_id  |    cb   |  left_to_burn
       ------- | ------- | --------------
        m_192  |   105   |      432 
        m_192  |   156   |      327 
        m_192  |    69   |      171 
        m_192  |   102   |      102  

        m_74   |   374   |     1274  
        m_74   |   396   |      900 
        m_74   |   504   |      504  

        m_233  |    51   |      132  
        m_233  |    81   |       81  

Window Functions trong Snowflake

Xu hướng tiêu hao calo

SELECT
    member_id,
    workout_date,
    calories_burned,

    AVG(calories_burned) OVER(   -- Trung bình lũy kế calo tiêu hao
        PARTITION BY member_id

        -- Tạo cửa sổ theo ngày tập, từ buổi đầu đến buổi hiện tại
        ORDER BY workout_date
        ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW

    ) AS avg_calories_burned

FROM FITNESS.workouts;
Window Functions trong Snowflake

Xu hướng tiêu hao calo


            member_id  |  workout_date  |  calories_burned  |  average_calories_burned
           ----------- | -------------- | ----------------- | -------------------------
              m_192    |   2025-01-01   |        105        |          105.0
              m_192    |   2025-01-03   |        156        |          130.5
              m_192    |   2025-01-04   |         69        |          110.0
              m_192    |   2025-01-10   |        102        |          108.0

               m_74    |   2025-02-10   |        374        |          374.0
               m_74    |   2025-02-13   |        396        |          385.0
               m_74    |   2025-02-14   |        504        |          426.7

              m_233    |   2025-03-05   |         51        |           51.0
              m_233    |   2025-03-12   |         81        |           66.0

Window Functions trong Snowflake

Ayo berlatih!

Window Functions trong Snowflake

Preparing Video For Download...