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

求助:如何在Google Sheets中匹配占比最高的城市?

解决Google Sheets中提取各城市最高占比完整行的问题

核心需求回顾

Sheet1的D列(Col4)是城市(存在重复),K列(Col11)是占比,需要筛选出每个城市对应占比最高的完整行,同时排除'Vision List'表F列标记为"Approved"的行。

逐个解决你遇到的问题

1. Query公式无法获取目标行的原因

你原来的Query公式仅返回城市和对应最大占比,没有关联回原表的完整行。要拿到整行数据,需先通过子查询得到每个城市的最大占比,再和过滤后的原表做关联:

=QUERY(
  FILTER('Sheet1'!A:M, 'Vision List'!F:F <> "Approved"),
  "SELECT * WHERE Col11 IN (SELECT MAX(Col11) WHERE Col4 IS NOT NULL GROUP BY Col4) GROUP BY Col4,Col1,Col2,Col3,Col5,Col6,Col7,Col8,Col9,Col10,Col12,Col13 ORDER BY Col4 ASC",
  1
)

注:GROUP BY需列出所有要保留的列(除聚合列),如果列数较多,推荐用下面的Filter+Rank方法更简洁。

2. Filter报错"范围大小不匹配"的解决

报错源于'Sheet1'!A:M和'Vision List'!F:F行数不一致(一个1000行,一个999行)。解决方法是统一两个范围的行数,比如指定具体行范围,或用ARRAY_CONSTRAIN强制对齐:

=FILTER(
  'Sheet1'!A:M,
  ARRAY_CONSTRAIN('Vision List'!F:F, ROWS('Sheet1'!A:M), 1) <> "Approved"
)

3. ArrayFormula+Match仅返回一行的解决

单独用Match只会返回第一个匹配项,要遍历每个城市获取对应最大占比的行,需结合BYROW和INDEX:

=BYROW(
  UNIQUE(FILTER('Sheet1'!D:D, 'Vision List'!F:F <> "Approved")),
  LAMBDA(city, INDEX(
    FILTER('Sheet1'!A:M, 'Sheet1'!D:D=city, 'Vision List'!F:F <> "Approved"),
    MATCH(MAX(FILTER('Sheet1'!K:K, 'Sheet1'!D:D=city, 'Vision List'!F:F <> "Approved")), FILTER('Sheet1'!K:K, 'Sheet1'!D:D=city, 'Vision List'!F:F <> "Approved"), 0)
  ))
)

更简洁的推荐方案

用RANK.EQ给每个城市的占比排名,直接筛选排名为1的行,一步到位:

=FILTER(
  'Sheet1'!A:M,
  'Vision List'!F:F <> "Approved",
  RANK.EQ('Sheet1'!K:K, FILTER('Sheet1'!K:K, 'Sheet1'!D:D='Sheet1'!D:D, 'Vision List'!F:F <> "Approved"), 0)=1
)

这个公式会自动为每个城市的占比降序排名,筛选出排名第一(占比最高)的完整行,同时排除Approved的记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 03:22:47