You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:28:24