Snowflake 中的 Window Functions
Jake Roach
Field Data Engineer
用于在一组"窗口"行上计算,并为每一行返回一个值
$$
$$
排序
RANK,DENSE_RANKFIRST_VALUE,LAST_VALUE,NTH_VALUELAG,LEAD聚合
COUNT,SUM,AVG窗口函数帮助我们回答新的问题!
$$
传统聚合函数必须包含 GROUP BY 子句。


不需要 GROUP BY!
SELECT
<other-fields>,
ROW_NUMBER() OVER(
ORDER BY <field>
) AS <alias>
FROM SCHEMA.table
...;
ROW_NUMBER() 为结果集中的每条记录分配行号
$$
OVER() 定义窗口GROUP BY!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