如何在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
相关产品推荐
相关产品推荐

