指派列號

Snowflake 的 Window Functions

Jake Roach

Field Data Engineer

視窗函式

用於在一個列的「視窗」中計算,並為每一列回傳一個值。

$$

$$

排名

  • RANKDENSE_RANK
  • FIRST_VALUELAST_VALUENTH_VALUE
  • LAGLEAD

彙總

  • COUNTSUMAVG
Snowflake 的 Window Functions

視窗函式

視窗函式能幫助我們回答新的問題!

$$

  • 各場館中第 3 受歡迎的演唱會是什麼?
  • 單品的銷售額逐日如何變化?
  • 我的移動平均觀看數是在上升還是下降?
Snowflake 的 Window Functions

傳統函式

傳統彙總函式必須搭配 GROUP BY 子句。

彙總函式的視覺示意圖。

Snowflake 的 Window Functions

視窗函式

視窗函式輸出的視覺示意圖。

                            不需要 GROUP BY

Snowflake 的 Window Functions

指派列號

SELECT
    <other-fields>,

    ROW_NUMBER() OVER(
        ORDER BY <field>
    ) AS <alias>

FROM SCHEMA.table

...;

ROW_NUMBER() 會為結果集中每筆紀錄指派一個列號

$$

  • OVER() 定義視窗
  • 為產生的欄位設定別名
  • 不需 GROUP BY
Snowflake 的 Window Functions

演唱會出席數

SELECT
    customer_id,
    event_name,

    -- Assign a row number to each 
    -- record in the result set

    ROW_NUMBER() OVER(
        ORDER BY time_spent_minutes
    ) AS row_num

FROM concerts.attendance;
  customer_id  |  event_name  |  row_num  
 ------------- | ------------ | ---------
     1931292   |  Music Fest  |    1    
     5462384   |  Elton John  |    2    
     7732891   |  Coachella   |    3    
     3124888   |  Porch Fest  |    4

$$

$$

記住語法:ROW_NUMBER() OVER( ORDER BY ...)

Snowflake 的 Window Functions

一起來練習吧!

Snowflake 的 Window Functions

Preparing Video For Download...