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

如何在Google Sheets中用Query实现区域总和除以每行数值

解决Google Sheets Query函数返回全局总和及计算列的问题

原公式问题分析

你当前的公式Query(Tank_List!A1:M716, "select A,E, SUM (E) Where B=1 Group by A,E",1)中,因为GROUP BY同时包含了A和E,每个分组都是唯一的A+E组合,所以SUM(E)只会返回当前分组的E值,导致ColC和ColB重复,无法得到全局总和。

解决方案

要实现ColC显示所有符合B=1条件的E列总总和,ColD显示该总和除以每行ColB(即E列值)的结果,可以用以下两种方法:

方法1:使用LET函数简化计算(推荐)

LET函数可以提前定义全局总和,避免重复计算,公式更高效:

=ArrayFormula(
  LET(
    total_e, SUMIF(Tank_List!B:B, 1, Tank_List!E:E),
    filtered_data, QUERY(Tank_List!A1:M716, "select A,E where B=1", 1),
    IF(
      ROW(filtered_data) = 1,
      {"A", "E", "Total_E", "Total/E"},
      {filtered_data, total_e, total_e / INDEX(filtered_data,, 2)}
    )
  )
)
  • total_e:计算所有B=1的E列数据总和
  • filtered_data:通过Query筛选出符合B=1的A、E列数据
  • 最后拼接表头和数据行,自动填充全局总和及计算列

方法2:直接拼接Query结果与全局总和

如果不想用LET,可以直接用ArrayFormula组合结果:

=ArrayFormula(
  IFERROR(
    {
      QUERY(Tank_List!A1:M716, "select A,E where B=1", 1),
      IF(ROW(A:A)=1, "Total_E", SUMIF(Tank_List!B:B,1,Tank_List!E:E)),
      IF(ROW(A:A)=1, "Total/E", SUMIF(Tank_List!B:B,1,Tank_List!E:E)/QUERY(Tank_List!A1:M716, "select E where B=1", 0))
    }
  )
)

注意:此方法中Query会执行两次,数据量大时效率略低于方法1。

关键要点

  • 全局总和需要单独计算(用SUMIF或SUM(QUERY(...))),不能依赖分组后的SUM(E)
  • 用ArrayFormula实现批量填充,避免逐行输入公式

内容的提问来源于stack exchange,提问作者Prof Dingledong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:41:26