如何在Snowflake中按固定行数分组进行聚合操作
Snowflake中按固定3行分组聚合的实现方法
核心思路是先给每一行分配分组ID,让连续的3行归属同一个分组,再基于分组ID执行聚合操作,步骤如下:
- 生成分组ID
利用ROW_NUMBER()函数按唯一键排序后给每行分配行号,再通过整数除法将每3行映射到同一个分组ID:
SELECT unique_key, target_column, -- 你需要聚合的列 (ROW_NUMBER() OVER (ORDER BY unique_key) - 1) / 3 AS group_id FROM your_input_table;
ORDER BY unique_key:因为所有键唯一,按键排序能保证分组的连续性(行号-1)/3:Snowflake中整数相除会自动取整,因此第1-3行的group_id为0,第4-6行为1,以此类推
- 基于分组ID执行聚合
将上面的查询作为子查询,外层按group_id分组,使用你需要的聚合函数(SUM、AVG、MAX等):
SELECT group_id, MIN(unique_key) AS group_min_key, -- 可选,展示分组内的最小唯一键 SUM(target_column) AS total -- 替换为你的聚合逻辑,比如AVG(target_column) FROM ( SELECT unique_key, target_column, (ROW_NUMBER() OVER (ORDER BY unique_key) - 1) / 3 AS group_id FROM your_input_table ) grouped_data GROUP BY group_id ORDER BY group_id;
如果希望分组ID从1开始计数,只需把分组ID的计算改成:
FLOOR((ROW_NUMBER() OVER (ORDER BY unique_key) - 1) / 3) + 1 AS group_id
内容的提问来源于stack exchange,提问作者Kapil
相关产品推荐
相关产品推荐

