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

如何用单个QUERY函数在Google Sheets中按条件计算多指标平均值

数据

我在Google Sheets中有如下表格:

月份国家指标名称数值
NovAAAMetric_198
NovAAAMetric_245
NovAAAMetric_34
NovBBBMetric_1100
NovBBBMetric_2214
NovBBBMetric_313
NovCCCMetric_175
NovCCCMetric_284
NovCCCMetric_321
NovWorldwideMetric_43
NovWorldwideMetric_587
OctAAAMetric_194
OctAAAMetric_241
OctAAAMetric_30
OctBBBMetric_196
OctBBBMetric_2210
OctBBBMetric_39
OctCCCMetric_171
OctCCCMetric_282
OctCCCMetric_317
OctWorldwideMetric_4-1
OctWorldwideMetric_583
目标

最终目标是生成一个按月份汇总各指标平均值的表格,如下所示:

月份Metric_1Metric_2Metric_3Metric_4Metric_5
Nov91114.3312.66387
Oct87109.338.66-183
失败尝试

我最初尝试使用多个VLOOKUP函数,但公式变得越来越繁琐,因此放弃了该方法。

后来我发现了QUERY函数和Google Visualization API Query Language,以下代码仅针对单个指标时有效:

+QUERY(my_table,"
  SELECT Col1, AVG(Col4)
  WHERE Col3 = 'Metric_1'
  GROUP BY Col1
  LABEL AVG(Col4) 'Metric_1'
",1)

执行后得到:

月份Metric_1
Nov91
Oct87

但我不清楚如何为每一列应用不同的条件,想知道是否可以在QUERY的SELECT部分集成IF()或AVERAGEIF()之类的函数,例如:

+QUERY(my_table,"
  SELECT Col1,
         AVERAGEIF(Col3,'=Metric_1',Col4),
         AVERAGEIF(Col3,'=Metric_2',Col4),
         AVERAGEIF(Col3,'=Metric_3',Col4),
         AVERAGEIF(Col3,'=Metric_4',Col4),
         AVERAGEIF(Col3,'=Metric_5',Col4),
  GROUP BY Col1
",1)

如何通过单个QUERY函数得到上述汇总表格?

解决方案

Google Sheets的QUERY语言不支持直接在SELECT子句中使用AVERAGEIF,但有两种简洁的方式实现需求:

方法一:条件聚合+手动指定列

利用AVG(IF(...))的组合,针对每个指标筛选后计算平均值,再通过LABEL设置表头:

=QUERY(my_table, "
  SELECT Col1,
         AVG(IF(Col3='Metric_1', Col4, NULL)),
         AVG(IF(Col3='Metric_2', Col4, NULL)),
         AVG(IF(Col3='Metric_3', Col4, NULL)),
         AVG(IF(Col3='Metric_4', Col4, NULL)),
         AVG(IF(Col3='Metric_5', Col4, NULL))
  GROUP BY Col1
  LABEL AVG(IF(Col3='Metric_1', Col4, NULL)) 'Metric_1',
        AVG(IF(Col3='Metric_2', Col4, NULL)) 'Metric_2',
        AVG(IF(Col3='Metric_3', Col4, NULL)) 'Metric_3',
        AVG(IF(Col3='Metric_4', Col4, NULL)) 'Metric_4',
        AVG(IF(Col3='Metric_5', Col4, NULL)) 'Metric_5'
", 1)
  • IF(Col3='Metric_X', Col4, NULL):仅保留匹配指标的数值,其余返回NULL(聚合函数会自动忽略NULL)
  • AVG(...):对筛选后的数值计算平均值
  • 参数1表示数据源包含表头行

方法二:使用PIVOT子句(更简洁)

QUERY的PIVOT子句可以自动将指标名称转为列,同时完成分组聚合,公式更简洁且扩展性强(新增指标无需修改公式):

=QUERY(my_table, "
  SELECT Col1, AVG(Col4)
  GROUP BY Col1
  PIVOT Col3
", 1)

这个公式会自动按月份分组,把指标名称列的所有唯一值作为表头列,计算对应数值的平均值,结果完全符合目标表格要求。

内容的提问来源于stack exchange,提问作者Martian Arts

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 13:45:29