Google Sheets Query双查询内实现算术运算计算储蓄率求助
Google Sheets QUERY 月度收支表加储蓄率解决方案
方案1:现有公式基础上直接扩展
你原有双QUERY存在一个隐性问题:第二个QUERY缺少和第一个一致的ORDER BY C DESC排序逻辑,可能出现储蓄额和月份不匹配的问题,修正后直接拼接计算列即可:
=LET( // 原有统计结果,修正第二个QUERY的排序逻辑 base_arr, { QUERY(Expense_Data, "SELECT C, SUM(Q) where T is not null GROUP BY C PIVOT T ORDER BY C desc limit 3",1), QUERY(Expense_Data, "Select Sum(Q) where T is not null Group by C ORDER BY C desc limit 3 label Sum(Q) 'Savings'") }, // 储蓄率计算,跳过表头行,错误值(收入为0的情况)返回空 rate_arr, {"储蓄率"; ARRAYFORMULA(IFERROR(INDEX(base_arr, SEQUENCE(ROWS(base_arr)-1,1,2),4)/INDEX(base_arr, SEQUENCE(ROWS(base_arr)-1,1,2),3), ""))}, // 拼接结果 {base_arr, rate_arr} )
如果你的表格不支持LET函数,直接把原有公式重复代入即可:
={ 你原来的双QUERY公式(记得给第二个QUERY加ORDER BY C DESC), {"储蓄率"; ARRAYFORMULA(IFERROR(INDEX(你原来的双QUERY公式, SEQUENCE(ROWS(你原来的双QUERY公式)-1,1,2),4)/INDEX(你原来的双QUERY公式, SEQUENCE(ROWS(你原来的双QUERY公式)-1,1,2),3), ""))} }
方案2:重构为单QUERY(更推荐)
避免多QUERY拼接的行对齐问题,直接用条件聚合实现所有字段计算,逻辑更稳定:
=QUERY( Expense_Data, "SELECT C, SUM(IF(T='支出',Q,0)), SUM(IF(T='收入',Q,0)), SUM(IF(T='收入',Q,0)) - SUM(IF(T='支出',Q,0)), (SUM(IF(T='收入',Q,0)) - SUM(IF(T='支出',Q,0)))/SUM(IF(T='收入',Q,0)) WHERE T IS NOT NULL GROUP BY C ORDER BY C DESC LIMIT 3 LABEL SUM(IF(T='支出',Q,0)) '支出', SUM(IF(T='收入',Q,0)) '收入', SUM(IF(T='收入',Q,0)) - SUM(IF(T='支出',Q,0)) '储蓄', (SUM(IF(T='收入',Q,0)) - SUM(IF(T='支出',Q,0)))/SUM(IF(T='收入',Q,0)) '储蓄率' FORMAT (SUM(IF(T='收入',Q,0)) - SUM(IF(T='支出',Q,0)))/SUM(IF(T='收入',Q,0)) '0.00%' ", 1 )
注:如果你的T列中收支类型的标签不是「支出」「收入」,替换为你实际的字段值即可,FORMAT子句可自动将储蓄率转为百分比格式,无需手动调整单元格格式。
注意事项
- 若当月收入为0,储蓄率计算会返回空值,避免出现除以0的错误
- 单QUERY方案后续调整统计字段、计算逻辑的成本更低,优先选择
内容的提问来源于stack exchange,提问作者raym01
相关产品推荐
相关产品推荐

