Google Sheets Query计算各农产品最新日期均价问题求助
解决Google Query获取农产品品类最新平均价格的分组错误问题
我懂你现在的困扰——想用Google Query从Google Sheets里提取每个农产品品类对应的各交易商最新价格的平均值,但一直被分组相关的错误卡住,结果也不符合预期。咱们先理清需求,再一步步修正代码。
需求拆解
从你的手动计算结果来看,你要的是:
- 对每个交易商+农产品品类的组合,找到该组合下的最新日期对应的价格(即每个交易商在每个品类下的最新报价)
- 再按农产品品类分组,计算该品类下所有交易商最新报价的平均值
原代码的问题
你原来的查询 select max(A), D, avg(E) where B = 'cpt-novo' group by D 有两个核心问题:
- 逻辑偏差:
avg(E)计算的是该品类所有历史价格的平均值,而非各交易商最新报价的平均值 - 分组规则冲突:Google Query要求非聚合列必须出现在
group by中,max(A)是聚合函数,但你同时选择了未分组的D和未聚合的E,这就触发了ADD_COL_TO_GROUP_BY_OR_AGG或CANNOT_GROUP_WITHOUT_AGG错误
修正后的代码
var queryString = encodeURIComponent("select D, avg(E) where (C,D,A) in (select C,D,max(A) where B='cpt-novo' group by C,D) group by D");
代码逻辑解释
咱们把这个查询拆成两部分看:
子查询(获取每个交易商+品类的最新日期):
select C,D,max(A) where B='cpt-novo' group by C,D
这部分会筛选出basis为cpt-novo的所有数据,然后按**交易商(C列)+农产品品类(D列)**分组,得到每个组合的最新日期。主查询(计算品类的平均最新价格):
select D, avg(E) where (C,D,A) in (...) group by D
这部分会筛选出所有符合「交易商+品类+日期=子查询结果」的行(也就是每个交易商每个品类的最新报价),再按农产品品类分组,计算该品类下所有最新报价的平均值。
结果验证
用你提供的测试数据,这个查询会精准返回你手动计算的结果:
- wheat-5-class: 8500
- wheat-11.5: 9133.333333
- wheat-12: 9333.333333
- wheat-12.5: 9550
- wheat-13: 9783.333333
- wheat-13.5: 10100
- barley: 9000
内容的提问来源于stack exchange,提问作者randomsuffer
相关产品推荐
相关产品推荐

