在Google BigQuery Standard SQL分组时能否逐行计算并聚合?
解决方案:在BigQuery标准SQL中实现分组内每行运算后求和
当然可以实现你的需求!核心思路是先获取每个move_id分组下的最小quantity,然后基于这个值对每行的value按比例调整,最后再分组求和得到结果。
方法一:使用CTE+窗口函数(可读性更高)
这种方式先通过窗口函数给每行标记出所属分组的最小quantity,再进行聚合计算,逻辑清晰易懂:
WITH preprocessed AS ( SELECT move_id, quantity, value, -- 计算当前move_id分组下的最小quantity MIN(quantity) OVER (PARTITION BY move_id) AS group_min_quantity FROM your_table_name ) SELECT move_id, MIN(quantity) AS quantity, -- 分组的最小quantity -- 按比例计算后求和,保留两位小数 ROUND(SUM(value * group_min_quantity / quantity), 2) AS value FROM preprocessed GROUP BY move_id;
方法二:子查询简化写法
如果想减少代码层级,也可以直接用子查询嵌套窗口函数:
SELECT move_id, MIN(quantity) AS quantity, ROUND(SUM(value * MIN(quantity) OVER (PARTITION BY move_id) / quantity), 2) AS value FROM your_table_name GROUP BY move_id;
结果验证
针对你给出的示例数据:
move_id=1的最小quantity是10- 第一行
value保持100,第二行150*(10/20)=75,第三行200*(10/30)≈66.67 - 求和后得到
100+75+66.67=241.67,完全符合你的预期结果。
BigQuery标准SQL对窗口函数和聚合函数的组合支持非常友好,这种先通过窗口函数获取分组级别的计算值,再对每行做运算后聚合的场景完全可以覆盖。
内容的提问来源于stack exchange,提问作者flyingL123
相关产品推荐
相关产品推荐

