Google Sheets筛选唯一行并保留最高展示量数据的公式求助
解决Google Sheets提取每个Post ID对应最高Impressions行的问题
我明白你现在遇到的困扰——用MMULT搭配FILTER的公式没法完整提取每个Post ID对应最高曝光量的行,这种数组公式有时候会因为数据量、重复最大值或者匹配逻辑的问题出现漏项。下面给你几个更可靠的解决方案,都是Google Sheets里能直接落地的:
方法1:QUERY+FILTER组合(兼容性强,适合大多数版本)
这个方法先通过QUERY分组得到每个Post ID的最高Impressions,再用这个结果匹配原表的完整行,逻辑清晰不容易出错:
=FILTER( 'Intermediate Data'!A2:L, ARRAYFORMULA('Intermediate Data'!F2:F & "|" & 'Intermediate Data'!G2:G) IN ARRAYFORMULA(QUERY('Intermediate Data'!F2:G, "SELECT F&'|'&MAX(G) WHERE F IS NOT NULL GROUP BY F")) )
原理说明:
- 用
QUERY分组计算每个Post ID(F列)对应的最大Impressions(G列),并把两者拼接成PostID|MaxImpression的格式 - 把原表的每一行也拼接成同样的格式,用
FILTER筛选出在QUERY结果里的行,这样就能得到每个Post ID对应最高Impressions的完整数据
方法2:BYROW+XLOOKUP(逐行处理,逻辑直观)
如果你的Google Sheets支持LAMBDA函数(现在大部分都支持),可以用这个逐行处理每个唯一Post ID的方案:
- 先在新表的A列提取所有唯一Post ID:
=UNIQUE('Intermediate Data'!F2:F)
- 在B列(或你需要的起始列)输入以下公式,下拉(或直接溢出)得到完整行数据:
=BYROW(A2:A, LAMBDA(post_id, XLOOKUP( 1, ('Intermediate Data'!F2:F=post_id)*('Intermediate Data'!G2:G=MAX(FILTER('Intermediate Data'!G2:G, 'Intermediate Data'!F2:F=post_id))), 'Intermediate Data'!A2:L ) ))
原理说明:
BYROW遍历每个唯一Post ID- 对每个Post ID,先找到它对应的最大Impressions值
- 用
XLOOKUP定位到原表中同时匹配Post ID和最大Impressions的行,返回整行数据
方法3:GROUPBY新函数(最简洁,需新版Google Sheets)
如果你的Google Sheets已经更新了2023年后推出的GROUPBY函数,这是最简洁的方案:
=GROUPBY( 'Intermediate Data'!F2:F, 'Intermediate Data'!A2:L, LAMBDA(row_group, INDEX(row_group, MATCH(MAX(INDEX(row_group,,7)), INDEX(row_group,,7), 0)) ), 1 )
原理说明:
GROUPBY按Post ID(F列)分组- 对每个分组(即同一个Post ID的所有行),用LAMBDA函数找到G列(第7列,从A开始数)最大值对应的行,返回整行数据
关于你原有公式的问题
你用的MMULT+FILTER方案,本质是通过矩阵乘法比较每一行和其他所有行的Impressions大小,但当数据量较大、存在多个相同最大值的行,或者Post ID为空时,容易出现计算逻辑遗漏或内存溢出的问题,导致部分Post ID没被提取到。上面的方案都避开了这个复杂的矩阵计算,逻辑更稳定。
内容的提问来源于stack exchange,提问作者KArnold
相关产品推荐
相关产品推荐

