Google Sheets QUERY函数如何提取求和前5项及各对应前3大求和原因
Google Sheets QUERY 多层TopN统计调整方案
你需要的效果属于嵌套TopN统计需求,单条基础QUERY无法直接实现,需配合高阶函数组合使用,默认你存储「求和原因」的列为E列,可根据你的实际字段位置调整对应参数。
无辅助列完整公式
=LET( // 先提取总SUM(M)最高的前5个D+Q项目组合 top5_projects, QUERY('BD3'!A:Q, "SELECT D,Q WHERE I='W34' AND M>0 AND L='Huacho' GROUP BY D,Q ORDER BY SUM(M) DESC LIMIT 5",-1), // 遍历每个项目,查询对应前3大原因 BYROW(top5_projects, LAMBDA(p, LET( current_d, INDEX(p,1,1), current_q, INDEX(p,1,2), // 查询当前项目下原因的Top3求和结果,E为原因列,可替换为你的实际列号 top3_reasons, QUERY('BD3'!A:Q, "SELECT E, SUM(M) WHERE I='W34' AND M>0 AND L='Huacho' AND D="&IF(ISTEXT(current_d),"'","")¤t_d&IF(ISTEXT(current_d),"'","")&" AND Q="&IF(ISTEXT(current_q),"'","")¤t_q&IF(ISTEXT(current_q),"'","")&" GROUP BY E ORDER BY SUM(M) DESC LIMIT 3",-1), // 填充项目信息,保证每行都对应显示所属项目 HSTACK(EXPAND(current_d,ROWS(top3_reasons),,current_d), EXPAND(current_q,ROWS(top3_reasons),,current_q), top3_reasons) ) )) )
调整说明
- 如果你的原因字段不是E列,把
top3_reasons定义语句里SELECT E的E替换为你的原因对应列号即可 - 公式自动兼容D、Q列为文本/数值格式,不需要手动调整引号
- 最终输出结构为:
项目D值 | 项目Q值 | 原因 | 原因对应M值求和,每个项目最多显示3条原因,不足3条则有多少显示多少
低门槛辅助列方案
如果不想用复杂嵌套,也可以拆分两步实现:
- 先把你原有QUERY放在任意空白区域,得到前5个D、Q项目的总求和结果
- 对每个D+Q项目单独写QUERY,筛选对应D、Q值后按原因分组求和取前3即可,更方便调试修改
内容的提问来源于stack exchange,提问作者user16761351
相关产品推荐
相关产品推荐

