分配行号

Snowflake 中的 Window Functions

Jake Roach

Field Data Engineer

窗口函数

用于在一组"窗口"行上计算,并为每一行返回一个值

$$

$$

排序

  • RANK,DENSE_RANK
  • FIRST_VALUE,LAST_VALUE,NTH_VALUE
  • LAG,LEAD

聚合

  • COUNT,SUM,AVG
Snowflake 中的 Window Functions

窗口函数

窗口函数帮助我们回答新的问题!

$$

  • 各场馆的第三受欢迎演出是什么?
  • 某商品销量逐日如何变化?
  • 滚动平均的观看量是上升还是下降?
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,

    -- 为结果集中的每条记录分配行号

    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

Passons à la pratique !

Snowflake 中的 Window Functions

Preparing Video For Download...